这是我目前所拥有的,但似乎与 http://zorc.breitbandkatze.de/crc.html 不匹配一直。
short crcTable[256];
for (int i = 0; i < 256; i++) {
int crc = (i << 4);
for (int j = 0; j < 8; j++) {
crc = (crc << 1) ^ ((crc & 0x800) ? 0x80F : 0);
}
crcTable[i] = crc & 0xFFF;
}
NSString *theString = @"blah";
unsigned char *string = (unsigned char *)[theString UTF8String];
int length = [theString length];
unsigned short crc = 0;
for (int i = 0; i < length; i++) {
crc = crcTable[(crc ^ string[i]) & 255] ^ (crc >> 8);
}
NSLog(@"%X", crc);
我们的一个实现不正确,我假设它是我的。但我不知道哪里出了问题,或者真的不知道如何解决问题。非常感谢任何帮助。
亚力克
最佳答案
1 替换
crc = crcTable[(crc ^ string[i]) & 255] ^ (crc >> 8);
通过
crc = crcTable[(crc >> 4) ^ string[i]] ^ (crc << 8);
2 在使用它们计算 crc 值之前,请镜像每个消息字节的 8 位。
3 最后镜像最终的crc
的12位。
作为最后一个 mod 的替代方案,您也可以只执行 crc & 0xfff
并告诉 breitbandkatze“反转数据字节”。
关于objective-c - 我的 CRC-12 实现有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8005199/