C语言中带十六进制和字符的按位and

C语言中带十六进制和字符的按位and,c,char,hex,bitwise-and,C,Char,Hex,Bitwise And,我在这里真的很沮丧。在尝试实现CRC-CCITT算法时,我在一个互联网站点上发现了一个非常好的例子 有一行的输出我完全不明白: unsigned short update_crc_ccitt( unsigned short crc, char c){ [...] short_c = 0x00ff & (unsigned short) c; [...] } 我想计算测试字符串123456789的CRC。所以在第一次运行中,字符'c'是1。根据我的理解,第一次运行的short_c也应该等

我在这里真的很沮丧。在尝试实现CRC-CCITT算法时,我在一个互联网站点上发现了一个非常好的例子

有一行的输出我完全不明白:

unsigned short update_crc_ccitt( unsigned short crc, char c){
[...]
short_c  = 0x00ff & (unsigned short) c;
[...]
}
我想计算测试字符串123456789的CRC。所以在第一次运行中,字符'c'是1。根据我的理解,第一次运行的short_c也应该等于1,但是当我将它打印到控制台时,我得到short_c=49表示c=1。怎么做


我的错在哪里

字符1的ASCII代码为0x31=49。这与ASCII码为^A的字符不同。

字符1的ASCII码为0x31=49。这与ASCII代码为^A的字符不同。

基本上,您混淆了字符和数字。字符串123456789中的第一个字母是字符“1”,在大多数典型计算机上,其十进制值为49

此值由确定,它描述如何为每个字符分配一个数值,该数值是计算机存储的数值

C保证10位十进制数字的编码将是一个紧凑的序列,没有间隔,从“0”开始。因此,您始终可以通过执行以下操作将字符转换为相应的数字:

const int digitValue = digit - '0';

这会将数字“0”转换为整数0,对于“9”之前(包括9)的所有数字,依此类推。

基本上,您混淆了字符和数字。字符串123456789中的第一个字母是字符“1”,在大多数典型计算机上,其十进制值为49

此值由确定,它描述如何为每个字符分配一个数值,该数值是计算机存储的数值

C保证10位十进制数字的编码将是一个紧凑的序列,没有间隔,从“0”开始。因此,您始终可以通过执行以下操作将字符转换为相应的数字:

const int digitValue = digit - '0';

这会将数字“0”转换为整数0,对于“9”之前(包括9)的所有数字,依此类推。

谢谢,这就解释了49的原因。没有想到编码。谢谢,这解释了为什么。我没想到编码。“1”是一个字符串中的字符,简单地说,1是数字,1是字符串,所有这些都是不同的。是的,我现在看到了。我正在尝试将C代码传输到matlab,这对我来说是一个额外的困难,除了作为C的新手。“1”是字符串中的字符,简单地说,1是数字,1是字符串,所有这些都是不同的。是的,我现在看到了。我正在尝试将C代码传输到matlab,所以除了作为C新手之外,这对我来说是一个额外的困难。谢谢你的努力!谢谢你的努力!