C中socket传输时int,long.float类型要怎么处理?需要转成网络字节顺序么?怎么转?

发布网友 发布时间:2022-04-24 15:49

我来回答

2个回答

热心网友 时间:2023-10-20 13:14

要。只要类型长度超过1字节的,都要转换网络字节序。

socket api,这些很容易搜索到的,htonl,htos,用法还是自己找吧,自己找的,才会印象深刻

追问嗯嗯,谢谢啦

热心网友 时间:2023-10-20 13:14

小端法(Little-Endian)就是低位字节排放在内存的低地址端(即该值的起始地址),高位字节排放在内存的高地址端;
大端法(Big-Endian)就是高位字节排放在内存的低地址端(即该值的起始地址),低位字节排放在内存的高地址端;
网络字节序是大端字节序,平常的PC机器上是小端字节序
需要转换下,可以用htons()函数做转换 将主机字节序转换为网络上用的字节序
int 和 long 都可以用htons()函数做转换
float型的一般来说,编译器是按照IEEE标准解释的,即把float/double看作4/8个字符的数组进行解释。因此,只要编译器是支持IEEE浮点标准的,就不需要考虑字节顺序。
如果你实在不放心,可以采取下面两种办法:
(1)在保证不超过int范围的情况下,将浮点数乘以100(或1000,10000,视所需精度随你定)转换为整数传输,在接收端再除以100,得到浮点数。
(2)将浮点数转换为字符串传输,由于字符串是一个字节一个字节的流,就不会有字节顺序的问题了。

希望有帮到你。追问htohl转换吧???转换之后数据丢失或出错了

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com