查看完整版本: [-- 如何使用Qt将网络数据转成本地数据(大小端转换) --]

QTCN开发网 -> Qt基础编程 -> 如何使用Qt将网络数据转成本地数据(大小端转换) [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

axylp123 2014-09-29 02:08

如何使用Qt将网络数据转成本地数据(大小端转换)

如题
求网络数据转成本地数据(大小端转换)demo代码一份

lzh280 2014-09-29 09:10
大小端转换可以用 <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 2014-09-29 11:44
或者可以考虑使用QDataStream,这个可以设置大小端,然后读出来的数据是对应本地的模式,本地的数据写入就会自动转换为设置的大小端

songhuirong1 2020-05-20 12:14
roywillow:或者可以考虑使用QDataStream,这个可以设置大小端,然后读出来的数据是对应本地的模式,本地的数据写入就会自动转换为设置的大小端 (2014-09-29 11:44) 

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

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

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

songhuirong1 2020-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的值应该反一下的,但是我试了都是一样的。是我的代码写错了吗?还是我理解有误?

snow_man_0 2020-05-25 15:47
songhuirong1:就是对应具体类型的,代码如下:
    int i = 1024;
    QByteArray ba;
    QDataStream out(&ba, QIODevice::WriteOnly);
....... (2020-05-25 10:43) 

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

songhuirong1 2020-05-26 17:35
snow_man_0:writeRawData这个函数不会转,要用out<<i; (2020-05-25 15:47) 

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


查看完整版本: [-- 如何使用Qt将网络数据转成本地数据(大小端转换) --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled