• 12608阅读
  • 7回复

[提问]如何使用Qt将网络数据转成本地数据(大小端转换) [复制链接]

上一主题 下一主题
离线axylp123
 

只看楼主 倒序阅读 楼主  发表于: 2014-09-29
如题
网络数据转成本地数据(大小端转换)demo代码一份
离线lzh280

只看该作者 1楼 发表于: 2014-09-29
大小端转换可以用 <QtEndian>
The <QtEndian> header provides functions to convert between little and big endian representations of numbers.

T qToBigEndian(T src)
void qToLittleEndian(T src, uchar * dest)
离线roywillow

只看该作者 2楼 发表于: 2014-09-29
或者可以考虑使用QDataStream,这个可以设置大小端,然后读出来的数据是对应本地的模式,本地的数据写入就会自动转换为设置的大小端
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线songhuirong1

只看该作者 3楼 发表于: 2020-05-20
回 roywillow 的帖子
roywillow:或者可以考虑使用QDataStream,这个可以设置大小端,然后读出来的数据是对应本地的模式,本地的数据写入就会自动转换为设置的大小端 (2014-09-29 11:44) 

我调用void QDataStream::setByteOrder(ByteOrder bo)这个函数改变函数的大小端,无论是设置大端,还是设置小端,用QByteArray接收数据,QByteArray的数据都一样的,照道理在这两种情况下,QByteArray的顺序应该是相反的才对。不知道为什么。
离线snow_man_0

只看该作者 4楼 发表于: 2020-05-20
回 songhuirong1 的帖子
songhuirong1:我调用void QDataStream::setByteOrder(ByteOrder bo)这个函数改变函数的大小端,无论是设置大端,还是设置小端,用QByteArray接收数据,QByteArray的数据都一样的,照道理在这两种情况下,QByteArray的顺序应该是相反的才对。不知道为什么。 (2020-05-20 12:14) 

QDataStream的《》操作需要对应具体类型如int, float, double,QByteArray不是具体类型
离线songhuirong1

只看该作者 5楼 发表于: 2020-05-25
回 snow_man_0 的帖子
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的值应该反一下的,但是我试了都是一样的。是我的代码写错了吗?还是我理解有误?
离线snow_man_0

只看该作者 6楼 发表于: 2020-05-25
回 songhuirong1 的帖子
songhuirong1:就是对应具体类型的,代码如下:
    int i = 1024;
    QByteArray ba;
    QDataStream out(&ba, QIODevice::WriteOnly);
....... (2020-05-25 10:43) 

writeRawData这个函数不会转,要用out<<i;
离线songhuirong1

只看该作者 7楼 发表于: 2020-05-26
回 snow_man_0 的帖子
snow_man_0:writeRawData这个函数不会转,要用out<<i; (2020-05-25 15:47) 

好吧。out << i,不符合我的要求,这个会自动插入一些长度数据,这样的结构是ba的长度会大于4.那只能自己重新实现字节序列化了。
快速回复
限100 字节
 
上一个 下一个