【问题标题】:How to convert octet to QString?如何将八位字节转换为 QString?
【发布时间】:2014-10-20 08:37:50
【问题描述】:

我的资源中有一个八位字节。所以我需要把它转换成QString。

我试过 QString str(a);但它不起作用。从我读到的八位字节假设是一个无符号字符

   a = 'A';

更新: a 是八位字节,从我读到它说“因为 DDS_Octet 相当于 1 字节(8 位)”(http://community.rti.com/kb/what-max-number-octets-i-can-put-topicdata-builtin-topics

更新 2:

其定义为无符号字符(无符号字节)

【问题讨论】:

  • “八位字节”是什么意思?一个字节? a 是什么?它是如何声明/定义的?
  • 你在.h文件中找到QString类了吗?有哪些构造函数重载可用?有哪些赋值运算符重载可用?应该有一个字符数组。
  • a 是八位字节,从我读到它说“因为 DDS_Octet 相当于 1 个字节(8 位)”(community.rti.com/kb/…
  • 请更新您的问题,而不是在 cmets 中传播问题。 -- 大多数读者都知道八位字节类似于 BYTE、8 位值或无符号字符。但是您的编译器需要 C 数据类型。因此,请回答 Joachims 的问题。
  • “八位字节”(8 位)是您通过网络传输的内容。它只存在于沟通渠道中。在您的计算机中,您有字节(每个可能包含也可能不包含 8 位),而 C++ 有 char(始终为一个字节)。只是一个术语,但重要的是要正确。

标签: c++ qt qstring qtcore data-distribution-service


【解决方案1】:

unsigned char 转换为QString

unsigned char a = 'A';
QString str = QString((QChar)a);

【讨论】:

  • 不反对,因为我很感激愿意提供帮助,但是.. 首先,这是带有类目标(!)的 C 风格转换,不一定保证随时都能工作。其次,即使是构造函数调用,也可能是隐式的,因此显式几乎没有意义。如果您不相信我的逻辑,请尝试我之前粘贴的代码。 :-) 此外,在我看来,鼓励 char 到 QString 的转换本身是不好的。
【解决方案2】:

您可能应该自行将八位字节转换为QString。这将产生一些多余的转换。您最好做的可能是将其转换为 Q(Latin1)Char 并在您需要将一些字符串操作放在一起时使用它。

仅靠自己做看起来不切实际。如果您仍然坚持这一点,请使用 QString 构造函数,如下所示:

main.cpp

#include <QString>
#include <QDebug>

int main()
{
    unsigned char a = 'A';
    QString string(a);
    qDebug() << string;
    return 0;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

构建并运行

qmake && make && ./main

输出

"A"

让我不要开始抱怨 QString 需要 QCoreApplication 实例才能正常工作,所以请让我们暂时忘记这一点。 :-)

这将开箱即用,因为 QString 有一个 constructor that takes QChar,并且可以隐式使用,因为 QChar 有一个 constructor that takes an unsigned char

顺便说一句,现在八位字节几乎完全是每字节 8 位。我不会担心它的处理方式不同,否则许多软件可能会在下面崩溃。只需查看您链接的代码中的代码,好吗?

// DDS_Octet is defined to be 8 bits. If chars are not 8 bits
// on your system, this will not work.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2010-12-24
    相关资源
    最近更新 更多