首页 > 解决方案 > 将 NULL 视为 QByteArray 中的字符

问题描述

我正在使用 QT4.8,我需要将一个数组发送到另一个包含一些0x00值的设备。但是,QByteArray 将0x00value 视为字符串的末尾。我想知道这是否可能,我正在努力实现什么。这是我的测试代码:-

zeroissue::zeroissue(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
    unsigned char zero = 0x00;
    QByteArray test;
    test.append("this is a test");
    test.append(zero);
    test.append("test complete");
    qDebug() << "test = " << test;
}

请建议我一种将0x00其视为 QByteArray 中的字符的方法。

标签: c++qtqt4.8qbytearray

解决方案


我想知道这是否可能,

是的。来自QByteArray 的文档

QByteArray 可用于存储原始字节(包括“\0”)和传统的 8 位“\0”结尾的字符串。

以下main功能按预期工作

int main(int argc, char** argv)
{
   char null_char = '\0';
   QByteArray test;
   test.append("this is a test");
   std::cout << "size(): " << test.size() << std::endl;

   test.append(null_char);
   std::cout << "size(): " << test.size() << std::endl;

   test.append("test complete");
   std::cout << "size(): " << test.size() << std::endl;

   return 0;
}

并产生以下预期输出:

size(): 14
size(): 15
size(): 28

当你使用

qDebug() << "test = " << test;

您应该在输出中看到嵌入的空字符。有关更多详细信息,请参阅https://doc.qt.io/qt-5/qdebug.html#operator-lt-lt-20


推荐阅读