socket 通信 Windos 和 Linux之间 Big endian 和 little endian的转换策略

 

Big endian 和 little endian

本次测试仅仅一32Bits的Intel X86系统和Moto Power PC系统TCP/IP socket connection联调作为讨论内容。
结论如下:

传输某一结构体。
#pragma   pack(4)   
typedef struct{
char name[6];
int age;
char sex;
short tel;
}student;
#pragma   pack()

NBO network byte order 网络字节序
HBO host byte order   主机字节序

1.当peer ends都为X86系统时,两端都是little endian,我们无需关心如何NBO和HBO转换,

发端:
student stu1;
stu1.age = 0x00000304;
memcpy( stu1.name,"abcdef",6);
stu1.sex = 'f';
stu1.tel = 0x0809;

收端:
age=0x304
tel=0x809

value=0X61 addr=0Xbfe6d3f0
value=0X62 addr=0Xbfe6d3f1
value=0X63 addr=0Xbfe6d3f2
value=0X64 addr=0Xbfe6d3f3
value=0X65 addr=0Xbfe6d3f4
value=0X66 addr=0Xbfe6d3f5
value=0X0 addr=0Xbfe6d3f6
value=0X0 addr=0Xbfe6d3f7
value=0X4 addr=0Xbfe6d3f8
value=0X3 addr=0Xbfe6d3f9
value=0X0 addr=0Xbfe6d3fa
value=0X0 addr=0Xbfe6d3fb
value=0X66 addr=0Xbfe6d3fc
value=0X0 addr=0Xbfe6d3fd
value=0X9 addr=0Xbfe6d3fe
value=0X8 addr=0Xbfe6d3ff

2.当peer ends都为Power系统时,两端都是big endian,我们无需关心如何NBO和HBO转换.

3.当一端为Power PC一端为X86时,小端需要做发送前的转换和接受后的转换,而大端不需要.
发送前小端对short型调用htons,对long和int调用htonl.
接受后小端对short型调用ntohs,对long和int调用ntohl.
则可以保证通过调用结构体变量得到的数值是正确的.

亦即发送方age = 0x00000304 ,接受方为也是0x000000304.如果不转化,可能变成0x04030000.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值