我需要检查和CRC8的方法。 我找到了这段代码,但它没有用:
- (int)crc8Checksum:(NSString*)dataFrame{
char j;
int crc8 = 0;
int x = 0;
for (int i = 0; i < [dataFrame length]; i++){
x = [dataFrame characterAtIndex:i];
for (int k = 0; k < 8; k++){
j = 1 & (x ^ crc8);
crc8 = floor0(crc8 / 2) & 0xFF;
x = floor0(x / 2) & 0xFF;
if (j != 0 ){
crc8 = crc8 ^ 0x8C;
}
}
}
return crc8;
}
请帮帮我!
答案 0 :(得分:0)
你的意思是“它不起作用”?在this catalog中有14种不同的CRC-8定义,并且在野外可能还有更多。你有比较的CRC值吗?是否有关于您实际需要什么CRC的文件?您的测试消息和相应的预期CRC有哪些?
您不能只选择一些随机的CRC-8代码并期望它能够满足您的需求。
该特定代码计算链接目录中的CRC-8 / MAXIM。然而,它确实是非常糟糕的代码。有不必要的分界和楼层。这是一个更好,更简单,更快速的内循环:
crc8 ^= x;
for (int k = 0; k < 8; k++)
crc8 = crc8 & 1 ? (crc8 >> 1) ^ 0x8c : crc8 >> 1;
您可以使用表格和算法更快地获得它,这些表格和算法一次计算一个字节的CRC或一次计算机器字。
代码中的x
有自己的问题,因为NSString可以是一串unicode字符,因此characterAtIndex
可能不会返回一个字节,而length
可能不会返回字节数。您需要一种方法将消息作为一系列字节来获取。