Calc CRC8用于目标c

时间:2017-01-26 10:53:11

标签: 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 < 8; k++){
             j = 1 & (x ^ crc8);
             crc8 = floor0(crc8 / 2) & 0xFF;
             x = floor0(x / 2) & 0xFF;
             if (j != 0 ){
                 crc8 = crc8 ^ 0x8C;
             }
         }
     }
     return crc8;
 }

请帮帮我!

1 个答案:

答案 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可能不会返回字节数。您需要一种方法将消息作为一系列字节来获取。