Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 计算目标c的CRC8_Objective C_Checksum_Crc - Fatal编程技术网

Objective c 计算目标c的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

我需要检查和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;
 }
-(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并处理字符,这会导致很多错误)。试试这个: