我真的很沮丧。尝试实现CRC-CCITT算法,我在Internet站点上找到了一个非常好的例子。
有一行输出我完全不明白:
unsigned short update_crc_ccitt( unsigned short crc, char c){
[...]
short_c = 0x00ff & (unsigned short) c;
[...]
}
我想计算"test"
字符串"123456789"
的CRC。所以在第一次运行时,char'c'是1.从我的理解short_c
来自第一次运行也应该等于1
,但是当我将它打印到控制台时,我得到{{ 1}} short_c = 49
。怎么样?
c = 1
我的错误在哪里?
答案 0 :(得分:3)
字符1
的ASCII码为0x31 = 49.这与ASCII码1的字符(^A
)不同。
答案 1 :(得分:2)
基本上你会混淆角色和数字。字符串"123456789"
中的第一个字母是字符'1'
,其在大多数典型计算机上的十进制值为49。
此值由the encoding of the characters决定,它描述了如何为每个字符分配一个数值,这是您的计算机存储的数值。
C保证10个十进制数字的编码将以紧凑的顺序排列,没有间隙,从'0'
开始。因此,您始终可以通过执行以下操作将字符转换为相应的数字:
const int digitValue = digit - '0';
这会将数字'0'
转换为整数0
,依此类推,直至(包括)'9'
的所有数字。