Qt套接字和字节序

cak*_*ake 6 c++ sockets networking qt endianness

我正在编写一个使用QUdpSocket通过网络传输数据的程序.这是我的第一个socket程序,我遇到了一个名为Endianness的有趣问题.

我的实际问题是,当我使用QNetwork作为我的套接字库时,我是否必须担心Endianness?如果我不得不担心,我该怎么做才能正确避免Endianness问题?

提前致谢.

Cha*_*via 11

通常,当您将大于单个字节的整数从一台计算机传输到另一台计算机时,您需要担心字节顺序(字节顺序).在C/C++中,这意味着如果您要发送类似16位,32位或64位整数的内容,则需要先将整数转换为网络字节顺序(也称为Big-Endian).然后,接收端的计算机必须将传入的整数转换为主机字节顺序,这是主机本机使用的任何字节顺序.这通常是使用完成htonsntohs一系列的库函数,但与Qt库,你也可以使用qToBigEndianqFromBigEndian功能.

请注意,发送ASCII或UTF-8文本时无需担心字节顺序,因为这些格式由单个字节序列组成,而不是多字节数据类型.