大小端问题
Short a= 15; //在内存中是一个字节一个字节的存储
高字节 0000 0000
低字节 0000 1111
15在内存中的存储
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
小端
低地址 | 高地址 | ||
0000 | 1111 | 0000 | 0000 |
大端
低地址 | 高地址 | ||
0000 | 0000 | 0000 | 1111 |
大端换成小端不用库函数用位运算
例 a = 1010 0011 1111 0000 1010 0101 1100 0011
大端 10100011 11110000 10100101 11000011
小端 11000011 10100101 11110000 10100011
(a&0xff000000)>>24| (a&0x00ff0000)>>8|(a&0x0000ff00)<<8|(a&0x000000ff)<<24
写程序判断大小端
typedef union
{
Char a;
Int b;
} DATE;
DATE A;
A.b = 1;
Printf(“%d”,A.a);//A.a是看char和int型共用的那个部分
0 小端
1 大端
该共用体总共占了4个字节
低地址 | 高地址 | ||
Char Int 都低地址开始存,最共用的是这个字节 |
|
|
|
假如是大端
低地址 | 高地址 | ||
0000 | 0000 | 0000 | 0001 |
假如是小端
低地址 | 高地址 | ||
0000 | 0001 | 0000 | 0000 |