我有一些枚举,它们由一系列十六进制值表示,如下所示:
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));