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

How to append an enum represented by a series of hex values to QByteArray?

本文关键字:枚举 QByteArray 表示 一系列 十六进制      更新时间:2023-10-16

我有一些枚举,它们由一系列十六进制值表示,如下所示:

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);

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

多谢。

也许你可以使用 QDataStream:

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

抱歉,我现在没有可用的qt,我无法对此进行测试

使用以下代码

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));