之前一直不在意大端模式与小端模式,随着学习的过程,这里总结一下
一、概念
小端模式(Little-Endian):低位字节排放在内存的低地址端,高位字节排放在内存的低地址端
大端模式(Big-Endian):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端
网络字节序:TCP/IP各层协议将字节定义的Big-Endian,即大端模式,通常称之为网络字节
二、举例说明
数字0x12345678从高位到低位依次为0x12、0x34、0x56、0x78,即正常顺序下的靠左的是高位,靠右的是低位
内存中栈是向下增长的(堆是向上增长的):
在Big-Endian中和Little-Endian中的存储方式分别如下:
三、应用实例
判断自己电脑中的存储方式:
//方法一:
int checkFunction() {
union {
int a;
char b;
}c;
c.a = 1;
return (c.b == 1);//大端模式则返回0,否则返回false
}
//方法二:
bool checkFunction2() {
short int test = 0x1234;
if (*((char *)&test) == 0x12)
return true;//如果大端模式则返回true
else return false;//否则返回false
}
int main()
{
int flag = checkFunction();
if(flag == 0)
printf("CPU is BigEndian!\n");
else printf("CPU is LittleEndian!\n");
int flag2 = checkFunction2();
if (flag2 == true)
printf("CPU is BigEndian!\n");
else printf("CPU is LittleEndian!\n");
return 0;
}