如何将由一系列十六进制值表示的枚举附加到 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));
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 为什么 int 类型的枚举类值不能用作 int
- 如何将由一系列十六进制值表示的枚举附加到 QByteArray?