在做通信协议解析时,需要用两个字节来表示一个值,0X9985小端模式下表示为0X8599,用计算机算出来等于34201,为什么在QT中代码实现就变成了-31335,一直搞不明白是为什么,请大家帮忙看看是我程序哪里错了吗,一直搞不明白是为什么
用qt编程的话,建议可以用qt定义的类型,比如这边用quint16,就可以很容易知道是无符号的两个字节。
以及这边再推荐可以使用QtEndian的转换方法
#include <QtEndian>
const unsigned char b[2] = {0x99, 0x85};
quint16 result = qFromLittleEndian<quint16>(b);
qDebug() << result;
打印结果34201
short是有符号的
#include <stdio.h>
int main()
{
short s = -31335;
char *p = (char *)&s;
printf("%x %x", *p, *(p+1));
return(0);
}
99 85
由此可知,你首先不应该小端,其次,用unsigned short
【相关推荐】