大小端问题
计算机中,通常是以字节为基本存储单元,比如数据类型char占用大小为1byte,int为4byte,这个时候4个字节的存放顺序就是大小端问题。
差异
小端:数据的低位在内存的低地址,数据的高位在内存的高地址
0x12345678(数据位数从左至右依次降低
)的小端字节序为
[0x78,0x56,0x34,0x12](地址从左至右依次升高
)
强制转换数据不需要调整字节内容
强制转换数据
整型
0x12345678 [0x78,0x56,0x34,0x12]
强制转换成
char型
0x78 [0x78]
不需要调整字节内容
大端:数据的低位在内存的高地址,数据的低位在内存的高地址
0x12345678(数据位数从左至右依次降低
)的打端字节序为
[0x12,0x34,0x56,0x78](地址从左至右依次升高
)
符号位的判定固定为第一字节,容易判断正负
强制转换数据
整型
0x12345678 [0x78,0x56,0x34,0x12]
强制转换成
char型
0x78 [0x78]
要把高地址的字节放到低地址,需要调整字节内容
如何判断大小端
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
union NODE
{
int i
;
char c
;
};
int main()
{
union NODE node
;
node
.i
= 0x12345678;
printf("%x\n", node
.c
);
system("pause");
return 0;
}
#输出
0x78说明数据低位存储在低地址,是小端模式
#输出
0x12说明数据高位存储在低地址,是大端模式
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i
= 0x12345678;
char c
= i
;
printf("%c\n", c
);
system("pause");
return 0;
}
#输出
0x78说明数据低位存储在低地址,是小端模式
#输出
0x12说明数据高位存储在低地址,是大端模式