C 大小端

大端模式(Big_endian): 字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
小端模式(Little_endian): 字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。
高字节表示的是权位的高低,例如十位比个位高,即左边的比右边的高;
高地址即右边的比左边的高。
另外一种说法是:
Little Endian就是低字节排放在内存的低端,高位字节排放在内存的高端,Intel处理器大多数小端字节序。
Big Endian就是高位字节排放在内存的低端,低位字节排放在内存的高端,Motorola处理器大多数使用大端字节序。
例如1 的二进制是 00 00 00 01 ,01是低位,从右往左依次是高位。
在这里插入图片描述
01-04代表的地址从低到高。此时的存储方式就是大端模式。
在这里插入图片描述
同理,可以判断此时的存储模式是小端模式。

一个简单的判断机器 是大端还是小端的程序:
bool CheckModle(){
union{
char ch;
int a;
}un;
un.a = 1;
return un.ch == 1;
}
int main(){
bool flag = CheckModle();
if (flag)
{cout << “This is Little Modle.” << endl;}
else
{cout << “This is Big Modle.” << endl;}
return 0;
}
union型数据所占的空间等于其最大的成员所占的空间。其中的类型公用一个空间。
union的有效值是最后一次赋值。谁最后一次赋值就是谁。
所以首先给你占两个字节的整型的a赋值1,然后判断char类型中1是如何存储的,则可以判断出是大端模式还是小端模式。

网路字节序:Tcp/Ip各层协议将字节序定义为Big Endian,因此Tcp/Ip协议中使用的字节序通常称之为网络字节序。
union IP{
unsigned long val;
struct{
unsigned char ip1;
unsigned char ip2;
unsigned char ip3;
unsigned char ip4;
};
};
int main(){
unsigned long value = 7491947914;
IP ip;
ip.val = value;
cout<<(int)ip.ip1<<"."<<(int)ip.ip2<<"."<<(int)ip.ip3<<"."<<(int)ip.ip4<<endl;
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值