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) |