首页 > 其他分享 >Qt uint64_t 保存到 QByteArray的问题

Qt uint64_t 保存到 QByteArray的问题

时间:2023-03-04 16:36:06浏览次数:51  
标签:uint64 uhf 00 QByteArray Qt worker DEBUG data

目的

把一个ulong(uint64_t)的数字保存到标签内存里面区,给标签分配了8个字节。现在是要写进去,以及写进去后能读出来。

第一步

把uint64_t写到内存中

void UHFReader_Worker::Write(uint64_t uid) const{
    QByteArray data;
    data.append(uid);    //把uint64_t转成byte 
 FILMSOUT_DEBUG(logger, QString("data:%1") .arg(QString(data.toHex(' ').toUpper())));
}

 测试

TEST_F(FilmsOut_ReaderTest, write) {
    
    uint64_t u = 1;
    reader->worker()->Write(u);
    
    u = 101;
    reader->worker()->Write(u);
    
    
    u=10105;
    reader->worker()->Write(u);
}

结果

FilmsOut_ReaderTest.write
07:57:06,932.457 [18484] DEBUG uhf.worker - data:01 
07:57:06,932.661 [18484] DEBUG uhf.worker - data:65 
07:57:06,932.840 [18484] DEBUG uhf.worker - data:79 

第一个和第二个没有问题,第三个明显问题。难道不应该是 27 79么

 

问题在哪儿

 帮助文档里面说

QByteArray &QByteArray::append(char ch)

并没有说可以append(uint64_t x)的类型,但是编译器也不报错。看来编译器把uint64_t 自动转换成 char也就是int8_t了,转的过程只取了uint64_t的低8位。(我也就入坑了)

怎么解决

既然uint64占用8字节,那就先占用8字节。然后把uint64的复制过去。

QByteArray data; 
data.resize(8);                          //长度固定8字节  
memcpy(data.data(),&uid,sizeof(uid));    //复制到字节数组里

结果

FilmsOut_ReaderTest.write

08:12:10,456.758 [22020] INFO  tst.reader - open eqp connect:0 
08:12:10,456.993 [22020] DEBUG uhf.worker - data:01 00 00 00 00 00 00 00 
08:12:10,457.175 [22020] DEBUG uhf.worker - data:65 00 00 00 00 00 00 00 
08:12:10,457.337 [22020] DEBUG uhf.worker - data:79 27 00 00 00 00 00 00 

结果还是不对头哇

大小端问题

还需要反转一下数组,

    QByteArray data;
    data.resize(8);
    memcpy(data.data(),&uid,sizeof(uid));
    std::reverse(data.begin(),data.end());        //反转数组

最后

FilmsOut_ReaderTest.write
 name:COM8 fail: 1. 
08:14:27,353.655 [22308] INFO  tst.reader - open eqp connect:0 
08:14:27,354.004 [22308] DEBUG uhf.worker - data:00 00 00 00 00 00 00 01 
08:14:27,354.378 [22308] DEBUG uhf.worker - data:00 00 00 00 00 00 00 65 
08:14:27,354.688 [22308] DEBUG uhf.worker - data:00 00 00 00 00 00 27 79 

标签:uint64,uhf,00,QByteArray,Qt,worker,DEBUG,data
From: https://www.cnblogs.com/Dtscal/p/17178505.html

相关文章

  • QT的Proxy Model(代理模型)
    在Qt中,ProxyModel(代理模型)是一种机制,可以让我们在不修改源数据的情况下,对数据进行排序、筛选、修改、隐藏、转换等操作。ProxyModel实际上是一种中间层,它将来自源模型的......
  • 有什么很好的软件是用 Qt 编写的?
    作者:闫有尽意无琼链接:https://www.zhihu.com/question/19630324/answer/2541042064来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。再补......
  • QT动态库的创建和使用
    QT动态库的创建和使用步骤一:创建一个库文件Library   步骤二:进行动态库封装方法的实现注意事项:要注意共享类均需要包含导出的宏定义这个宏定义和导出向导的宏......
  • QT基础01
    创建按钮的一些操作,自定义信号和槽,只需自己创建.h和.cpp返回值都是void信号只需声明不需要实现可以有参可以重载槽必须声明必须实现,可以有参,可以重载当槽和信号出现重载,......
  • Qt关于moveToThread
    描述:问题最近使用moveToThread函数时遇到一个bug,主线程中创建一个类对象,一个新线程,并把类对象移到新线程中,采用的是新建此类,在建线程,接着线程启动。此时会遇到一个问题......
  • QT 使用QSetting读取配置文件中的中文乱码
    转载:https://www.shuzhiduo.com/A/kmzL3jjKdG/windows下方案:读配置文件之前添加以下语句:settings.setIniCodec(QTextCodec::codecForName("UTF-8"));//在此添加编码格式......
  • QT 设置QLabel的字体颜色
    m_labelTitletext->setText("仿真系统");//设置字号QFontft;ft.setPointSize(16);m_labelTitletext->setFont(ft);//设置颜色QPalette......
  • Qt-FFmpeg开发-视频播放【软解码 + OpenGL显示RGB图像】(3)
    Qt-FFmpeg开发-视频播放【软解码+OpenGL显示RGB图像】目录Qt-FFmpeg开发-视频播放【软解码+OpenGL显示RGB图像】1、概述2、实现效果3、FFmpeg软解码流程4、主要代码4.......
  • PyQt5 自然语言处理学习笔记(一)
    前言最近想将自然语言处理的项目进行可视化,尽量还是使用回Python语言,因此打算用PyQT来实现相应的功能。入门案例一个简单的自然语言处理的demo,使用PyQt框架,该demo可以读......
  • QT QGraphicsView 如何实现图片按照鼠标点进行放大缩小效果
    原文链接#include<QScrollBar>//获取当前鼠标相对于view的位置;QPointFcursorPoint=event->pos();//获取当前鼠标相对于scene的位置;......