C语言巧用联合体union判定数据的存储格式(大小端)

简介: C语言巧用联合体union判定数据的存储格式(大小端)

联合体大家可能比较陌生,但是大家对结构体稍微熟悉一点吧。其实它们二个类似,只不过结构体成员占用不同的地址,而联合体所有成员占用相同地址。利用这个特性我们就能判断在当前编译器下存储的数据的格式。那么如何确定呢?

我这里就通过代码的方法给大家讲解。

typedef union
{
  short value;  //2个字节
  unsigned char buff[2]; 一个unsigned char 占一个字节
  
}test; //定义一个联合体
int main(void)
{
  
  test test1; 
  test1.value=0x3445; //赋值为0x3445
  //由于联合体成员共用一段地址。所以buff的地址和value地址相同
    //我们打印出地址,和地址的值。
  printf("value的起始地址为:%d,低字节地址为:%d,高字节地址为:%d\n",
     &(test1.value),&(test1.buff[0]),&(test1.buff[1]));
  printf("value的值为:0x%x,低字节数据为:0x%x,高字节数据
为:0x%x\n",test1.value,test1.buff[0],test1.buff[1]);
  return 1;
  
  
}

结果如图:

我们可以看出,低字节存储的是0x45对应的是value的低位0x45,所以低地址存储低位,是小端模式。

到这里就结束了?你们学会了吗?

目录
相关文章
|
7天前
|
存储 编译器 C语言
C语言基础知识:数据在内存中的存储解析(整数,浮点数)
C语言基础知识:数据在内存中的存储解析(整数,浮点数)
|
8天前
|
存储 C语言
C语言动态存储方式与静态存储方式
C语言动态存储方式与静态存储方式
7 0
|
9天前
|
C语言
深入理解C语言中的printf函数及数据输出
深入理解C语言中的printf函数及数据输出
14 0
|
16天前
|
C语言
多组数据的输入方法(c语言实现)
多组数据的输入方法(c语言实现)
|
21天前
|
存储 编译器 C语言
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
|
22天前
|
编译器 C语言 C++
C语言printf的输出格式大全及颜色字体打印
C语言printf的输出格式大全及颜色字体打印
25 0
|
23天前
|
存储 安全 网络协议
自定义类型-结构体,联合体和枚举-C语言
自定义类型-结构体,联合体和枚举-C语言
|
25天前
|
存储 搜索推荐 编译器
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
|
2月前
|
存储 编译器 程序员
【C语言】整形数据和浮点型数据在内存中的存储
【C语言】整形数据和浮点型数据在内存中的存储
16 0
|
2月前
|
Ubuntu 编译器 Linux
C语言中经典的结构体和联合体共用实例
C语言中经典的结构体和联合体共用实例
23 0