Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2341761
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:05:25

strtol(s,p,n) 是 标准 C 里面的函数,把 ASCII 字符串表示的 n 进制数转成一个二进制整数
你要的无论是十六进制还是校验和,实际上在 C 或汇编语言里面都是以二进制表示的
无论在 C 还是汇编以什么形式在源代码中出现,执行的时候都是以二进制方式执行的
char x = 0x0d; //虽然源代码以 16 禁止的 0x0d 赋值给变量 x, 在电脑内存里面这个变量是以二进制的 1101 储存在变量 x 里面
所以赋值的时候 x = 0x0d; 和 x = 13; 是完全等价的,没有任何区别的。
而字符串就是 ASCII 的组合,Edit1->Text 实际上就是 ASCII 的数组,Edit1->Text[1] 是这个 ASCII 集合中的第一个 ASCII
字符串 "BD" 是两个字节,也就是两个 ASCII,每个 ASCII 占一个字节,
并且由于 ASCII 表示的字符的字节以二进制数来表示的时候数值是连续的,所以把字符串变成二进制也可以用 ASCII 值运算来得到
这里一定要注意 C 语言里面的 char 型变量就是一个字节,可以表示一个字节的整数,也可以表示 ASCII 字符等,
不要理解为 char 就是纯粹的一个字符,C 语言和汇编语言里面是一样的,一个字节,一个整数,一个字符,一个 ASCII 是同一种类型。
AnsiString s = "BD";
char x = (((s[1]>'9')?(s[1]-'A'+0x0a):(s[1]-'0'))<<4)|((s[2]>'9')?(s[2]-'A'+0x0a):(s[2]-'0'));
上面的转换就把 ASCII 字符串的 "BD" 转为等价 16 进制的 0xBD 的二进制数赋值给整数 x, 整数 x 就等于 0xBD 了

--------------------next---------------------

阅读(975) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~