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,所以低地址存储低位,是小端模式。

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

目录
相关文章
|
27天前
|
存储 数据可视化 编译器
【C语言】union 关键字详解
联合体(`union`)是一种强大的数据结构,在C语言中具有广泛的应用。通过共享内存位置,联合体可以在不同时间存储不同类型的数据,从而节省内存。在嵌入式系统、硬件编程和协议解析等领域,联合体的使用尤为常见。理解和正确使用联合体可以使代码更加高效和灵活,特别是在内存受限的系统中。
68 3
【C语言】union 关键字详解
|
27天前
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
28天前
|
存储 数据管理 C语言
C 语言中的文件操作:数据持久化的关键桥梁
C语言中的文件操作是实现数据持久化的重要手段,通过 fopen、fclose、fread、fwrite 等函数,可以实现对文件的创建、读写和关闭,构建程序与外部数据存储之间的桥梁。
|
1月前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
1月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
62 11
|
2月前
|
存储 C语言 C++
深入C语言,发现多样的数据之枚举和联合体
深入C语言,发现多样的数据之枚举和联合体
深入C语言,发现多样的数据之枚举和联合体
|
2月前
|
存储 C语言
深入C语言内存:数据在内存中的存储
深入C语言内存:数据在内存中的存储
|
2月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
2月前
|
存储 编译器 Linux
深入理解 C 语言中的联合体
深入理解 C 语言中的联合体
|
存储 程序员 C语言
程序员之路:C语言中存储类别
程序员之路:C语言中存储类别
141 0