硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1695|回复: 2
收起左侧

[Qt] QByteArray默认是有符号数,CRC函数遇到一个坑。

[复制链接]

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2020-7-22 08:51:19 | 显示全部楼层 |阅读模式
本帖最后由 caicaptain2 于 2020-7-22 09:24 编辑
  1. QByteArray MainWindow::CRC16(QByteArray* data,quint16 length)
  2. {
  3.     uint8_t chCRCHi = 0xFF; // 高CRC字节初始化
  4.     uint8_t chCRCLo = 0xFF; // 低CRC字节初始化
  5.     quint16 wIndex;            // CRC循环中的索引
  6.     quint16 i=0;
  7.     QByteArray CRCValue;

  8.     for (i=0;i<length;i++)
  9.     {
  10.         // 计算CRC
  11.         wIndex = chCRCHi ^ ((uint8_t)data->at(i)) ;//这里大大的坑。。。必须加强制转换uint8_t。
  12.         chCRCHi = chCRCLo ^ chCRCHTalbe[wIndex];
  13.         chCRCLo = chCRCLTalbe[wIndex] ;
  14.     }
  15.     CRCValue.append(chCRCHi);
  16.     CRCValue.append(chCRCLo);
  17.     return CRCValue ;

  18. }
复制代码
请关注一行“大大的坑”处。
根据armfly的案例,c语言的,改成qt的。 刚用的时候,CRC结果正确,就没有管他了。 后来再用的时候,CRC结果总是不对。。。。。
后来发现,以前正确是偶然。如果数据字节全部是正数,就是正确的。如果数据字节有负数,就完蛋了。
还有个误解,以前看到过,只要是位操作符,编译器把数据全部当无符号的。 可惜,qt这里明显不是。

由于从C语言的环境转过来,特别喜欢QByteArray这个类,和以前常用的char数组很相似。 可惜,qt怎么不提供一个无符号的QByteArray呢?
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2020-7-22 16:18:17 | 显示全部楼层
Hp_2018 发表于 2020-7-22 14:56
(uint8_t)data->at(i)     貌似这也是一个坑 ,缺点儿什么。

啊啊啊???请说出来啊。。。 担心
回复

使用道具 举报

31

主题

208

回帖

301

积分

高级会员

积分
301
发表于 2020-7-22 22:36:37 | 显示全部楼层
caicaptain2 发表于 2020-7-22 16:18
啊啊啊???请说出来啊。。。 担心

对不起! 眼拙看错了一个地方。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 18:39 , Processed in 0.154003 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表