将QByteArray转换为quint16

时间:2010-10-11 14:54:00

标签: qt

我有来自libpurple的以下C宏:

#define yahoo_get16(buf) ((((*(buf))<<8)&0xff00) + ((*((buf)+1)) & 0xff))

我如何将其作为一个函数编写,将QByteArray作为参数并使用上述c宏中的算法重新获取quint16值?

我问了一个类似的问题,它将从quint16转换为QByteArray here所以基本上我现在要做的就是与该函数相反。

感谢。

3 个答案:

答案 0 :(得分:4)

您也可以使用qFromBigEndian

QByteArray bytes;
...
quint16 result = qFromBigEndian<quint16>((uchar*)bytes.data());

答案 1 :(得分:3)

我会尝试以下几行(即让QDataStream为你做的工作,可以使用QByteArray构建,让我们称之为yourByteArray):

QDataStream dataStream(yourByteArray);
quint16 foo;
dataStream >> foo;

我希望有所帮助。

编辑:这question看起来有点相关。

答案 2 :(得分:2)

Greg S的代码对我来说很好(Qt 4.6.2和WinXP)。 quint16的最低有效位来自QByteArray [1],最高有效位来自QByteArray [0]。但是如果你想要精确控制如何构造quint16,那么获取字节数组的两个字节并从那些构造quint16:

QDataStream dataStream(yourByteArray);
quint8 byte0;
quint8 byte1;
dataStream >> byte0 >> byte1;
quint16 result = (byte0 << 8) + byte1;