欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Qt 关于字节流可否嵌套的一个实验

Qt 关于字节流可否嵌套的一个实验

2024/10/25 0:32:11 来源:https://blog.csdn.net/xie__jin__cheng/article/details/140228652  浏览:    关键词:Qt 关于字节流可否嵌套的一个实验

1.可否嵌套方案

1.1 概要

 * 需求:数据头+数据体+校验码+数据尾
 * 校验码的生成只与数据体相关
 * 可否通过QByteArray的嵌套实现这个功能呢,
 * 最终失败:
 * 理由一个char*的整体内存是无法再头部插入输入的。
 * 那么只能靠生成校验码的时候,将指针向后移动两位来实现

1.2 代码

#include <QCoreApplication>
#include <QDebug>
#include <QByteArray>
#include <QIODevice>struct Stu1 {unsigned short ushort1;char char1;
};/*** 需求:数据头+数据体+校验码+数据尾* 校验码的生成只与数据体相关* 可否通过QByteArray的嵌套实现这个功能呢,* 最终失败:* 理由一个char*的整体内存是无法再头部插入输入的。* 那么只能靠生成校验码的时候,将指针向后移动两位来实现*/
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QByteArray qas;Stu1 st;st.ushort1 = 5;st.char1 =6;QByteArray message2;QDataStream out2(&message2, QIODevice::WriteOnly);char char2 = 7;out2<<char2;qDebug()<<"message2:"<<message2.toStdString();QByteArray message;QDataStream out(&message, QIODevice::WriteOnly);out<<st.ushort1;out<<st.char1;qDebug()<<"message:"<<message.toStdString();QByteArray message3;QDataStream out3(&message3, QIODevice::WriteOnly);out3<<st.ushort1;out3<<message3;out3<<st.char1;qDebug()<<"message3:"<<message3.toStdString();message2.insert(0,st.ushort1);//message2.insert(message2.length()-1,st.char1);qDebug()<<"message2:"<<message2.toStdString();qDebug()<<"QByteArray test";return a.exec();
}

1.3 运行结果

message2: "\x07"
message: "\x00\x05\x06"
message3: "\x00\x05\x00\x00\x00\x02\x00\x05\x06"
message2: "\x05\x07"
QByteArray test

2.移动地址方案

2.1 概要

 * 需求:数据头+数据体+校验码+数据尾
 * 校验码的生成只与数据体相关
 * 可否通过QByteArray的嵌套实现这个功能呢,
 * 最终失败:
 * 理由一个char*的整体内存是无法再头部插入输入的。
 * 那么只能靠生成校验码的时候,将指针向后移动两位来实现

2.2 代码

#include <QCoreApplication>
#include <QDebug>
#include <QByteArray>
#include <QIODevice>struct Stu1 {unsigned short ushort1;char char1;
};/*** 需求:数据头+数据体+校验码+数据尾* 校验码的生成只与数据体相关* 可否通过QByteArray的嵌套实现这个功能呢,* 最终失败:* 理由一个char*的整体内存是无法再头部插入输入的。* 那么只能靠生成校验码的时候,将指针向后移动两位来实现*/
int main2(int argc, char *argv[])
{QCoreApplication a(argc, argv);QByteArray qas;Stu1 st;st.ushort1 = 5;st.char1 =6;QByteArray message2;QDataStream out2(&message2, QIODevice::WriteOnly);char char2 = 7;out2<<char2;qDebug()<<"message2:"<<message2.toStdString();QByteArray message;QDataStream out(&message, QIODevice::WriteOnly);out<<st.ushort1;out<<st.char1;qDebug()<<"message:"<<message.toStdString();QByteArray message3;QDataStream out3(&message3, QIODevice::WriteOnly);out3<<st.ushort1;out3<<message3;out3<<st.char1;qDebug()<<"message3:"<<message3.toStdString();message2.insert(0,st.ushort1);//message2.insert(message2.length()-1,st.char1);qDebug()<<"message2:"<<message2.toStdString();qDebug()<<"QByteArray test";return a.exec();
}

2.3 运行结果

Pointer address: 0x132d0164910
addr: 0x132d0164912
len: 2
addr[0]: 5
addr[1]: 6
QByteArray test

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com