我需要的方法来检查和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;
}请帮帮我!
发布于 2017-01-27 01:21:18
你说“它不工作”是什么意思?在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也可能不返回字节数。您需要一种方法来获取一系列字节形式的消息。
https://stackoverflow.com/questions/41871890
复制相似问题