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

时间:2018-08-24 09:39:30

标签: c++ qt hex qbytearray

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

enum someEnum
{
    NameA = 0x2121,
    NameB = 0x2223,
    NameC = 0x2020
};

我想通过以下方式将这些枚举之一附加到QByteArray:

QByteArray anArray;
anArray.append(NameA);

但是这种方法会产生警告

implicit conversion from 'int' to 'char' changes value from 8481 to 33.

事实上,即使我执行以下操作:

anArray.append(static_cast<char>(NameA));

它仅附加0x21(十进制33)。

我还尝试了以下操作:

const char * t = reinterpret_cast<char*>(NameA);
anArray.append(t, sizeof(t));

但这会导致细分错误。

我当然可以进行以下操作而不会造成价值损失或崩溃或任何其他问题:

anArray.append(0x21);
anArray.append(0x21);

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

非常感谢。

2 个答案:

答案 0 :(得分:5)

可能您可以使用QDataStream:

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

dataStream << NameA;

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

答案 1 :(得分:0)

使用以下代码

QByteArray byteArray;
// this will store the integer as a hex value
byteArray.append(QByteArray::number(NameA, 16));
// this will store the integer as a base 10 value
byteArray.append(QByteArray::number(NameA));