【发布时间】:2019-01-30 18:25:21
【问题描述】:
我有一些枚举,它们以下列方式由一系列十六进制值表示:
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);
但我不想这样,我想直接附加枚举。你能建议一个正确的方法吗?
非常感谢。
【问题讨论】:
-
十六进制、八进制、十进制、二进制、
表示无关。这只是写相同数字的不同方式。 -
@JesperJuhl 我没说这很重要,我只是想不通为什么 QByteArray 不能正确附加值。
-
因为 QByteArray 使用单独的 bytes 操作(实际上是
char但在这里无关紧要)并且您的enum的各个值都超过了单个字节可以表示的值.它不解释数据,它不知道它存储的什么——它只是一个字节流。因此,要将您的enum值存储在其中,您需要将它们转换为一系列字节。顺便说一句,“如何将十六进制表示的枚举附加到 QByteArray?” 确实表示您认为十六进制表示很重要。 -
那么,有没有办法可以追加多个字节?
-
是的。阅读the documentation,尤其是
append、prepend、push_back和insert的各种重载。另外,如下面的答案所述,请查看QDataStream。
标签: c++ qt hex qbytearray