Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 快速将quint16/无符号short追加到QByteArray_C++_Qt_Qbytearray - Fatal编程技术网

C++ 快速将quint16/无符号short追加到QByteArray

C++ 快速将quint16/无符号short追加到QByteArray,c++,qt,qbytearray,C++,Qt,Qbytearray,在我的项目中,我正在使用QbyteArray在程序运行时向它们添加数据。大多数情况下,使用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 instea

在我的项目中,我正在使用QbyteArray在程序运行时向它们添加数据。大多数情况下,使用
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字节)插入:

我应该向QByteArray追加什么,以便“number”的两个字节都被追加,而不仅仅是一个字节?此外,最好使用尽可能快的方法,因为该程序需要很好的性能。所以绝对不能转换为qstring


感谢您的时间。

QByteArray本身只支持追加字节;要附加固定大小整数类型的大端数表示形式,您可以构建自己的
运算符,或者在附加
quint16
时,您期望什么样的端数?我相信大端数。应该是012c获取附录阅读文档我看不到任何
QByteArray.append(quint)
…为什么不直接使用
QList
?因为QByteArray不仅仅是帖子中所说的一堆quint16。工作完美无瑕。非常感谢你的快速回答:)我不想问这个问题,但是倒回去怎么样?那么从包含“012c”的QByteArray到qint16?我已经尝试了ba.mid(3,2).toUShort(0,16),但是这不起作用,因为它不查看二进制数据。要将大端值读取为整数,通常的方法是“对于读取的每个字节,将目标左移8,或将读取的字节移到目标中”。使用跟踪读取位置的实际流更容易做到这一点。
ba.append(QByteArray::number(number, 16));
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;