按位 - 并且在C中使用HEX和CHAR

时间:2013-09-06 07:26:28

标签: c char hex bitwise-and

我真的很沮丧。尝试实现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

我的错误在哪里?

2 个答案:

答案 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'的所有数字。