【问题标题】:bitwise-and with HEX and CHAR in CC 中的按位与 HEX 和 CHAR
【发布时间】:2013-09-10 05:24:18
【问题描述】:

我真的很沮丧。尝试实现 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,但是当我将它打印到控制台时,我得到 short_c = 49 for @987654327 @。怎么样?

0x00ff in binary is: 1 1 1 1 1 1 1 1 
char 1 in binary is: 0 0 0 0 0 0 0 1
bitand should be   : 0 0 0 0 0 0 0 1 

我的错误在哪里?

【问题讨论】:

  • '1' 是一个字符(即在字符串中),只是1 是数字,"1" 是一个字符串,都是不同的。
  • 是的,我现在可以看到了。我正在尝试将 C 代码传输到 matlab,所以除了成为 C 菜鸟之外,这对我来说是一个额外的困难。

标签: c char hex bitwise-and


【解决方案1】:

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

【讨论】:

  • 谢谢,这解释了为什么 49。没有想到编码。
【解决方案2】:

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

此值由the encoding of the characters 决定,它描述了如何为每个字符分配一个数值,该数值是您的计算机存储的。

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

const int digitValue = digit - '0';

这会将数字 '0' 转换为整数 0,以此类推直到(包括)'9' 的所有数字。

【讨论】:

  • 感谢您的努力!
猜你喜欢
  • 2015-08-18
  • 2013-10-07
  • 2022-10-13
  • 2013-12-02
  • 1970-01-01
  • 2020-01-09
  • 2012-06-01
  • 2012-05-14
  • 2012-07-26
相关资源
最近更新 更多