我有一个来自libpurple的C宏:
#define yahoo_get16(buf) ((((*(buf))<<8)&0xff00) + ((*((buf)+1)) & 0xff))
如何编写一个函数,该函数将以QByteArray作为参数,并使用上面C宏中的算法返回quint16值?
我曾经提出过一个类似的问题,将quint16转换为QByteArray,请参考此处,所以现在我正在尝试执行该函数的反向操作。
谢谢。
You can also use qFromBigEndian
QByteArray bytes;
...
quint16 result = qFromBigEndian<quint16>((uchar*)bytes.data());
QDataStream
为你完成工作,它可以使用QByteArray
构造,我们称之为yourByteArray):QDataStream dataStream(yourByteArray);
quint16 foo;
dataStream >> foo;
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;