携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情
:old_key:判断大小端
我们已经知道有大小端两种存储模式,而我们要如何判断一台机器是小端存储,还是大端储存呢?也就是判断当前机器的字节序?
我们可以设计几个程序,来验证该不同机器的字节序。 设计思路 我们可以想办法将某一地址处存的字节数据拿出即可判断,如果高地址低字节位,说明是小端存储,否者就是大端存储模式。
//代码一
//利用char*指针得到低地址的字节数据
#include<stdio.h>
int main()
{
int a=1;
int *pa=&a;
//利用char*存储a第一个字节的低地址
char*pc=(char*)pa;
printf("%d",*pc);//访问这个字节的地址,打印数据
return 0;
}
低地址打印了低字节位,说明bug郭的机器是采用小端存储模式!
我们刚刚是说写个程序,判断字节序,所以我们需要封装一下!
//代码1
#include <stdio.h>
int check_sys()
{
int i = 1;
return (*(char *)&i);
}
int main()
{
int ret = check_sys();
if(ret == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
我们之前还了解到了一个C语言自定义类型联合体,我们后期还会详细介绍! 联合体就是一块空间,多个变量联合使用,共同占用一块空间!当我们访问其中一个变量,该空间就存储着该变量! 我们可以利用联合体这一特性来判断字节序
//代码2
int check_sys()
{
union
{
int i;
char c;
}un;
un.i=1;
return un.c;
}
学会了吗,这就是大小端的判断!