自学内容网 自学内容网

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)!