【内存查看&指针强转&union】判断大小端存储方式
原创
©著作权归作者所有:来自51CTO博客作者DUT_LYH的原创作品,请联系作者获取转载授权,否则将追究法律责任
.
- 打开调试,窗口,内存,内存1
- 在地址中输入&a,可以获取a的内存地址的信息
- 将地址的最后一位改成5,可以看到数字从左向右移动了一格
- 说明地址是从左向右增加的,也就是左边是地址的低位
- 那么就是说低位储存了78,就是这个int的低权重的位置,所以是小端存储
- 可以使用char*截取数据进行判断
- union
在vs里面打开内存查看器
打开调试,窗口,内存,内存1
#include <iostream>
#include <xmemory>
using namespace std;
#define debug(x) cout<<#x<<": "<<(x)<<endl;
int main() {
int a = 0x12345678;
char* p = (char *)&a;
debug(*p == 0x12)
debug(*p == 0x78)
* p = 0x0;
return 0;
}
在地址中输入&a,可以获取a的内存地址的信息
将地址的最后一位改成5,可以看到数字从左向右移动了一格
说明地址是从左向右增加的,也就是左边是地址的低位
那么就是说低位储存了78,就是这个int的低权重的位置,所以是小端存储
可以使用char*截取数据进行判断
#include <stdio.h>
int main() {
int i = 0x87654321;
char *p;
p = (char *) &i;
if (*p == 0x21) {
printf("这是小端存储\n");
}
else {
printf("这是大端存储\n");
}
return 0;
}
union
#include <iostream>
#include <cstdio>
using namespace std;
union un {
int i;
char c;
};
int main() {
un u;
u.i = 0x12345678;
printf("u.c: %x\n",u.c);
if (u.c == 0x78) {
cout << "这是小端" << endl;
}
else {
cout << "这是大端" << endl;
}
char* p = &u.c;
printf("*(++&u.c): %x\n", *(++p));
return 0;
}