如何将由一系列十六进制值表示的枚举附加到QByteArray?

the*_*ive 2 c++ qt hex qbytearray

我有一些枚举,由以下方式的十六进制值系列表示:

enum someEnum
{
    NameA = 0x2121,
    NameB = 0x2223,
    NameC = 0x2020
};
Run Code Online (Sandbox Code Playgroud)

我想以下列方式将其中一个枚举附加到QByteArray:

QByteArray anArray;
anArray.append(NameA);
Run Code Online (Sandbox Code Playgroud)

但这种方法会产生警告

implicit conversion from 'int' to 'char' changes value from 8481 to 33.
Run Code Online (Sandbox Code Playgroud)

事实上,即使我做了以下事情:

anArray.append(static_cast<char>(NameA));
Run Code Online (Sandbox Code Playgroud)

它只附加0x21(十进制33).

我也尝试过以下方法:

const char * t = reinterpret_cast<char*>(NameA);
anArray.append(t, sizeof(t));
Run Code Online (Sandbox Code Playgroud)

但这会导致分段错误.

我当然可以在不丢失任何价值或崩溃或任何其他问题的情况下执行以下操作:

anArray.append(0x21);
anArray.append(0x21);
Run Code Online (Sandbox Code Playgroud)

但我不想那样,我想直接附加枚举.你能建议一个正确的方法吗?

非常感谢.

Ern*_*own 5

可能你可以使用QDataStream:

QByteArray byteArray;
QDataStream dataStream(&byteArray, QIODevice::WriteOnly);

dataStream << NameA;
Run Code Online (Sandbox Code Playgroud)

对不起,但我现在没有qt可用,我无法测试这个

  • 请注意,默认情况下`QDataStream`使用大端(可配置).另外[文档](http://doc.qt.io/qt-5/qdatastream.html)建议使用预定义大小的类型,因此建议(写入和读取时)强制转换为`qint16`. (2认同)