标题:如何使用Qt将网络数据转成本地数据(大小端转换)
作者:axylp123
日期:2014-09-29 02:08
内容:
如题
求网络数据转成本地数据(大小端转换)demo代码一份
#1 [lzh280 09-29 09:10]
大小端转换可以用
The header provides functions to convert between little and big endian representations of numbers.
T qToBigEndian(T src)
void qToLittleEndian(T src, uchar * dest)
#2 [roywillow 09-29 11:44]
或者可以考虑使用QDataStream,这个可以设置大小端,然后读出来的数据是对应本地的模式,本地的数据写入就会自动转换为设置的大小端
#3 回 roywillow 的帖子 [songhuirong1 05-20 12:14]
roywillow:或者可以考虑使用QDataStream,这个可以设置大小端,然后读出来的数据是对应本地的模式,本地的数据写入就会自动转换为设置的大小端(2014-09-29 11:44)
我调用void QDataStream::setByteOrder(ByteOrder bo)这个函数改变函数的大小端,无论是设置大端,还是设置小端,用QByteArray接收数据,QByteArray的数据都一样的,照道理在这两种情况下,QByteArray的顺序应该是相反的才对。不知道为什么。
#4 回 songhuirong1 的帖子 [snow_man_0 05-20 12:46]
songhuirong1:我调用void QDataStream::setByteOrder(ByteOrder bo)这个函数改变函数的大小端,无论是设置大端,还是设置小端,用QByteArray接收数据,QByteArray的数据都一样的,照道理在这两种情况下,QByteArray的顺序应该是相反的才对。不知道为什么。 (2020-05-20 12:14)
QDataStream的《》操作需要对应具体类型如int, float, double,QByteArray不是具体类型
#5 回 snow_man_0 的帖子 [songhuirong1 05-25 10:43]
snow_man_0:QDataStream的《》操作需要对应具体类型如int, float, double,QByteArray不是具体类型(2020-05-20 12:46)
就是对应具体类型的,代码如下:
int i = 1024;
QByteArray ba;
QDataStream out(&ba, QIODevice::WriteOnly);
out.setByteOrder(QDataStream::LittleEndian);
out.writeRawData((char *)&i, sizeof(i));
无论是大端还是小端,调试看了下,ba[0] = 0, ba[1] = 4, ba[2] = 0, ba[3] = 0,照道理讲,大端和小端,ba的值应该反一下的,但是我试了都是一样的。是我的代码写错了吗?还是我理解有误?