快速将quint16/unsigned short添加到QByteArray中
Append quint16/unsigned short to QByteArray quickly
在我的项目中,我正在使用QByteArrays在程序运行时向它们附加数据。大多数情况下,使用QByteArray::append()
可以很好地附加一个简单的quint8
。但是当quint16
被附加时,只附加1字节而不是2字节。
QByteArray ba = QByteArray::fromHex("010203");
quint number(300);//300 in hex is 012c
ba.append(number);//What should be appended instead of just number?
//the current incorrect result is
ba.toHex() == "0102032c"
//the desired result is
ba.toHex() == "010203012c"
我已经尝试过了,但它只是插入值作为一个字符串(4字节):
ba.append(QByteArray::number(number, 16));
我应该追加什么到QByteArray,所以两个字节的"数字"得到追加,而不是仅仅一个字节?此外,最快的方法可能是首选,因为这个程序需要有很大的性能时间。所以绝对不能转换为qstring。
感谢您的宝贵时间。
QByteArray
本身只支持附加字节;要附加固定大小的整数类型的大端表示,您可以使用适当的位移位构建自己的operator<<
(或其他您喜欢的)重载:
QByteArray &operator<<(QByteArray &l, quint8 r)
{
l.append(r);
return l;
}
QByteArray &operator<<(QByteArray &l, quint16 r)
{
return l<<quint8(r>>8)<<quint8(r);
}
QByteArray &operator<<(QByteArray &l, quint32 r)
{
return l<<quint16(r>>16)<<quint16(r);
}
允许您编写如下代码:
QByteArray b;
b<<quint16(300); // appends 0x01 0x2c
b<<quint8(4); // appends 0x04
b<<quint16(4); // appends 0x00 0x04
b<<quint32(123456); // appends 0x00 0x01 0xe2 0x40
b<<quint8(1)<<quin16(2)<<quint32(3); // appends 0x01 0x00 0x02 0x00 0x00 0x00 0x03
你应该避免写
QByteArray b;
b<<1;
因为理论上输出取决于当前平台整数的大小(尽管Qt int
支持的所有平台上的AFAIK都是32位)。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 将数字添加到 QByteArray
- 同时向QByteArray添加多个十六进制数字
- 快速将quint16/unsigned short添加到QByteArray中