网络---字节序

字节序:cpu对内存中数据以字节为单位进行存取的顺序。
主机字节序分为:

  1. 大端字节序:低地址存高位。
  2. 小端字节序:低地址存低位

地址指内存地址;在内存中,一块空间的起始地址为低地址。比如int a[10],其中a[0]为低地址。
位表示二进制比特位;左边为高为,右边为地位。如inta=1; —> 0x00000001,其中1为低位。

eg:int a =ox01020304 ,则它的大小端存储内存情况分别如下:
在这里插入图片描述

一个主机的字节序为大端还是小端字节序取决于cpu架构:

  1. x86/x86_64――>小端;
  2. MIPS―――>大端

主机字节序对于网络通信的影响:两端主机字节序不同有可能会造成数据二义;
解决方案: 定义网络通信字节序标准,网络通信字节序为大端字节序。
不管主机是什么字节序,网络中数据必须是网络字节序,两端主机根据自己的主机字节序进行数据转换即可。

字节序所针对的数据类型:存储单元大于一个字节的数据类型。short,int,long,float,double…
单字节存储(char)不涉及字节序问题。

所以网络通信时,存储单元大于一个字节的基础数据类型数据都要进行字节序转换;使用网络字节序,这样程序的可移植性较好。

编写一个程序判断当前主机的字节序:

int a=1;
char *b=(char*)&a;
if(*b==1){ //小端 }
else   {//大端}

或者用联合体(所有成员公用一块空间):

union{int a; char b;} tmp;
tmp.a=1;
if(tmp.b==1){ //小端 }
else   {//大端}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值