objective-c - 我的 CRC-12 实现有什么问题?

标签 objective-c c crc

这是我目前所拥有的,但似乎与 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/

相关文章:

ios - 复制 UITableViewCells 错误

c - 错误: lvalue required as left operand of assignment

java - Android NDK 库仅在运行时不加载三星 galaxy 4.0.2 手机

javascript - 如何在 Javascript 中使用自定义多项式实现 CRC16?

networking - 如何使用多项式/CRC在此二进制消息上运行错误检测?

iOS BLE 无葡萄糖测量通知

ios - 进入后台暂停游戏

ios - 具有相同数据源的多个 UICollectionView

file - 检查两个文件是否相等的最快哈希算法是什么?

c - #ifdef 找出使用的是 debian 还是 fedora/RH/centos