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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值