首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标c的计算CRC8

目标c的计算CRC8
EN

Stack Overflow用户
提问于 2017-01-26 18:53:11
回答 1查看 524关注 0票数 0

我需要的方法来检查和CRC8。我找到了这段代码,但它不起作用:

代码语言:javascript
复制
 - (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;
 }

请帮帮我!

EN

回答 1

Stack Overflow用户

发布于 2017-01-27 01:21:18

你说“它不工作”是什么意思?在this catalog中有14种不同的CRC-8定义,可能还有更多。您是否有要比较的CRC值?是否有关于您实际需要的CRC的文档?您的测试消息和对应的预期CRC是什么?

你不能随便挑选一些CRC-8代码,然后期望它能做你需要的事情。

该特定代码计算链接目录中的CRC-8/MAXIM。然而,这确实是一段糟糕的代码。有不必要的分隔和楼层。下面是一个更好、更简单、更快的内部循环:

代码语言:javascript
复制
    crc8 ^= x;
    for (int k = 0; k < 8; k++)
        crc8 = crc8 & 1 ? (crc8 >> 1) ^ 0x8c : crc8 >> 1;

使用一次计算一个字节或一个机器字的表和算法,可以更快地计算CRC。

代码中的x有其自身的问题,因为NSString可以是unicode字符串,因此characterAtIndex可能不返回字节,length也可能不返回字节数。您需要一种方法来获取一系列字节形式的消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41871890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档