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

How to append an enum represented by a series of hex values to 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);

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

非常感谢。

也许你可以使用 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));