【问题标题】:Using QBuffer for binary data使用 QBuffer 处理二进制数据
【发布时间】:2023-03-17 03:59:01
【问题描述】:

我正在编写一个 Qt (4.6) 应用程序,该应用程序负责从 usb acm 调制解调器设备读取数据。从设备中读入原始二进制和(ascii)字符数据的混合体。我有一个线程负责在设备可用时不断地将数据从设备读取到共享内存中,第二个线程负责处理这些数据。

我正在考虑使用 QBuffer 类作为存储数据并在线程之间共享数据的一种方式,但是当我读到 QByteArray(QBuffer 用作数据存储)时。我开始担心 QBuffer 将始终将 '\0' Null 字符附加到线程之间传递的数据的末尾,因为 QByteArray 表现出这种行为?是这种情况还是 QBuffer 允许我存储和检索数据而不对我的所有数据强制执行任何终止 '\0' 字符?

【问题讨论】:

  • QBuffer 不是循环缓冲区,即它会随着您添加数据而不断增长,并且在您读取它们时不会删除它们。所以它并不能真正用作线程之间的通信方法。

标签: c++ qt


【解决方案1】:

终止的 0 对您的应用程序是透明的。

例如,如果您将“ABC”附加到数组,则将附加“ABC\0”,但 size() 仍将返回 3,如果您随后附加“DEF”,则该数组将包含“ABCDEF\0” (并且 size() 仍将返回 6,而不是 7)。

如果您请求指向原始数据的指针以使用 C 库中的函数进行进一步处理,则终止 0 可能很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2017-05-10
    • 2018-02-05
    • 1970-01-01
    • 2018-03-31
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多