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
原文地址:https://blog.csdn.net/xie__jin__cheng/article/details/140228652
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!