在这里,有一个CCITT-CRC16的实现。对于那些避免链接,它是用C写的,如下所示:
unsigned short crc16(data_p, length)
char *data_p;
unsigned short length;
{
unsigned char i;
unsigned int data;
unsigned int crc;
crc = 0xffff;
if (length == 0)
return (~crc);
do {
for (i = 0 data = (unsigned int)0xff & *data_p++;
i < 8;
i++, data >>= 1) {
if ((crc & 0x0001) ^ (data & 0x0001))
crc = (crc >> 1) ^ POLY;
else
crc >>= 1;
}
} while (--length);
crc = ~crc;
data = crc;
crc = (crc << 8) | (data >> 8 & 0xFF);
return (crc);
}
我需要在CCITT-CRC16实现中找到的两个字段:data_p
和length
,所以我的问题是······用于更新CRC的整数值是什么意思?在我翻译的代码中,程序执行crc.put(someChar)
很多次,然后在再次调用crc.put(someChar)
之前更改someChar
,并且执行多次。假设我将所有这些somechars
逐一保存到一个名为somechars
的数组中。
所有这些字符产生的CRC是否会通过CRC16(someChars,sizeof(someChars)/sizeof(someChars[0]))
...调用?
另外,我必须为数组使用UINT8_T
类型吗?
我没有例子可以参考,所以我在这里要求确保这是100%正确的。
有许多可供选择的算法来计算这个CRC:一些使用查找表,一些使用位操作,一些翻转一些位,一些翻转一些其他位...
您提到的crcname.put(int byte)
函数很可能是对正在计算的CRC的更新。也就是说,它计算内部do/while
循环的一次迭代,使用传递的字节(实际上是unsigned char
而不是int
)作为data
局部变量的值。
在未知的crcname
类型中,可能有一个成员变量存储crc
变量,一个构造函数将其设置为intitial值,还有一个int crcname.getfinalcrcvalue()
进行最后的计算。
无论如何,如果您没有任何示例来比较您的输出,那么您不太可能得到正确的结果。太多会出错的事情。
关于UINT8_T
类型,这并不重要,除非您的char_bits
值与8
不同,如果是这种情况,您就有更大的问题了!
这是代码 更新的答案
我试过用 如何在php中计算crc16 CRC16函数的C到PHP转换 我在寻找校验和
当RFID阅读器处于自动模式时,它每读取一个标签就自动发送11个字节。CRC-此值使用除最后两个字节外的所有字节计算,这两个字节是CRCH(CRC高字节)和CRCL(CRC低字节)。 当我从阅读器读取RFID标签时,我得到了11个字节的传输...即(十六进制)<代码>01 0B 03 01 06 87分贝C7 FF E5 68。最后两个字节是消息的CRC16校验和。为了确认数据是否正确,我需要在目
他们使用术语截断多项式来表示:。他们使用什么模式将此扩展到此?
我有一个扩展类,在这里我扩展了,如下所示,它工作得很好。 但是现在,我需要为某个视图控制器更改它的标题,所以我想过它的重写,但是失败了。如何可以重写它,以便我可以更改它的?
这是我的actionCreator代码,crud所有的代码都一样,只需要改一个 “getMovies" 这个名字,所以我想要把这个函数封装一下,每次只需要传入一个函数名字就行了。求大佬给封装一下?? 感谢