我有来自libpurple的以下C宏:
#define yahoo_get16(buf) ((((*(buf))<<8)&0xff00) + ((*((buf)+1)) & 0xff))
我如何将其作为一个函数编写,将QByteArray作为参数并使用上述c宏中的算法重新获取quint16值?
我问了一个类似的问题,它将从quint16转换为QByteArray here所以基本上我现在要做的就是与该函数相反。
感谢。
答案 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;