【问题标题】:append data into QByteArray将数据追加到 QByteArray
【发布时间】:2014-04-28 10:37:54
【问题描述】:

我想将 QString 'str' 写入 QByteArray 'baData'。

“baData”具有固定大小 80 字节(这是必需的)。

如果'str'的大小小于80,追加'baData的剩余数据em>' 具有 0(零) 值。

我写了以下代码,但不能正常工作。

void MyClass::CopyData(QByteArray &packet)

{

         packet.truncate(0);
         packet[0] = 0x12;
         packet[1] = 0x34;
         ....

         QByteArray baData;
         baData.resize(80);
         baData = 0;

        QString str = "Hello Wrold";

        baData = str.toLocal8Bit();

        packet.append(baData, 80);

}

数据包大小不固定,但如果固定,则 baData 大小为 80。

【问题讨论】:

    标签: qt qstring qbytearray


    【解决方案1】:

    以下对我有用:

    QByteArray baData;
    baData.fill(0, 80);
    
    QString str = "Hello World";
    baData.insert(0, str.toLocal8Bit());
    baData.resize(80);
    

    基本上它的工作原理是,用 80 个字节的 0 填充 QByteArray,在开头插入数据,然后将其大小调整回 80 个字节。

    【讨论】:

    • 是否需要resize(),因为它不需要resize(),如果我的'str'超过80个字节,我只想写前80个字节,我该如何处理。
    • @beparas 如果您希望它的长度为 80 字节,那么您需要调整它的大小。如果您的 str 超过 80 个字节,baData 将仅包含上例中的前 80 个字节。
    • 小心。 QByteArray::resize() 不会产生以空字符结尾的字符串。如果您需要一个 80 字符的以 null 结尾的 QByteArray,则将大小调整为少一 - 79。QByteArray::data() 始终以至少 size()+1 个可访问字符为 null 结尾。
    猜你喜欢
    • 2012-12-01
    • 2012-09-14
    • 1970-01-01
    • 2020-04-25
    • 2014-06-09
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多