测试机器大小端的方法
- 小端法:低位字节存放在低地址,高位字节存放在高地址
- 大端法:低位字节存放在高地址,高位字节存放在低地址
判断电脑大小端模式的方法:
方法一
C语言中的char和int:
在C语言中并没有char类型的常量,其实是用int类型表示char。举个例子:
char ch = 'a'; //分别输出ch的字符和对应的ascii码。即打印出的是字符或整数 printf("%c, %d", ch, ch);
输出结果为:a, 97
将int 48存起来,然后取得其地址,再将这个地址转为char* 这时候,如果是小端存储,那么char*指针就指向48;48对应的ASCII码为字符‘0’;
void judge1() {
int i = 48;
int* p = &i;
char c = 0;
c = *((char*)p);
if (c == '0')
cout << "小端" << endl;
else
cout << "大端" << endl;
}
方法二
定义变量int i=1;将 i 的地址拿到,强转成char*型,这时候就取到了 i 的低地址,这时候如果是1就是小端存储,如果是0就是大端存储。
void judge2() {
int i = 1;
char c = (*(char*)&i);
if (c)
cout << "小端" << endl;
else
cout << "大端" << endl;
}
方法三
联合体union是一种特殊数据类型,允许在相同的内存位置存储不同的数据类型。可以定义一个带有多成员的共同体,但任何时候只能有一个成员带有值。
定义联合体,一个成员是多字节,一个是单字节,给多字节的成员赋一个最低一个字节不为0,其他字节为0 的值,再用第二个成员来判断,如果第二个字节不为0,就是小端,若为0,就是大端。
void judge3() {
union
{
int i;
char c;
} un;
un.i = 1;
if (un.c == 1)
cout << "小端" << endl;
else
cout << "大端" << endl;
}
最后修改于 2021-12-22