Objective c 计算目标c的CRC8
我需要检查和CRC8的方法。 我找到了此代码,但它不起作用:Objective c 计算目标c的CRC8,objective-c,checksum,crc,Objective C,Checksum,Crc,我需要检查和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
- (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;
}
-(int)CRC8校验和:(NSString*)数据帧{
查尔j;
int crc8=0;
int x=0;
对于(int i=0;i<[数据帧长度];i++){
x=[数据帧字符索引:i];
对于(int k=0;k<8;k++){
j=1&(x^crc8);
crc8=地板0(crc8/2)和0xFF;
x=地板0(x/2)和0xFF;
如果(j!=0){
crc8=crc8^0x8C;
}
}
}
返回crc8;
}
请帮帮我 你说“它不起作用”是什么意思?在中有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;
crc8^=x;
对于(int k=0;k<8;k++)
crc8=crc8&1?(crc8>>1)^0x8c:crc8>>1;
通过使用表和算法,每次计算一个字节或一个机器字的CRC,您可以更快地得到它
代码中的
x
有其自身的问题,因为NSString可以是unicode字符的字符串,因此characterAtIndex
可能不返回字节,而length
可能不返回字节数。您需要一种将消息获取为一系列字节的方法。您能提供更多的上下文吗?还有,您是否有任何错误?或者输出不是您所期望的?Xcode说“floor0”是旧的C方法。这是crc的一个有点奇怪的实现(它使用NSString并处理字符,这会导致很多错误)。试试这个: