#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// ---------判断大小端
// 0x11223344
// -------------> 地址由低到高
// 大端存储方式: 11 22 33 44 高位在低地址上 (符合直觉)
// 小端存储方式: 44 33 22 11 低位在低地址上
// 定义一个联合体
union Un {
int n;
char m;
};
int IsLittle() {
// 1.-----用联合体实现:联合体内所有变量共用一块内存
union Un num;
num.n = 0x1; // 把 int 型成员变量赋值为1
// printf("%d\n", num.m); // 用 char 读取这段内存,
return num.m;
}
int isLittle() {
// 2.-----用强制类型转换实现 int* 到 char* 的转变
// 如果是大端,强转后取0x11;
// 如果是小端,强转后取0x44;
int n = 0x11223344;
char ret = *(char*)&n;
if (ret == 0x44) {
return 1; // 是小端
}
else {
return 0;
}
}
int main() {
//判断大小端
if (IsLittle() == 1) {
printf("小端\n");
}
else {
printf("大端\n");
}
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h> // 包含数据类型int32_t, int8_t
union Uu {
int32_t n ;
struct {
int8_t a;
int8_t b;
int8_t c;
int8_t d;
};
}u;
int main() {
u.n = 0x1;
printf("%d的点分十进制:", u.n);
printf("%d.%d.%d.%d\n", u.a, u.b, u.c, u.d);
system("pause");
return 0;
}