用Union体测试处理器大小端
如何将多个字节安排到内存中去?大端对齐和小端对齐两种方式
大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。(查看内存通常是:左高右低)int i=1; BE: 00 00 00 01
小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中 。int i=1; LE: 01 00 00 00
利用union类型数据的特点:所有成员的起始地址一致。对 union 型的成员的存取都是相对于该联合体基地址的偏移量为 0 处开始, 也就是联合体的访问不论对哪个变量的存取都是从 union 的首地址位置开始。
例一:
①将int型成员赋值为1;
②获取char型成员值
③如果取低地址值为1则是小端模式,如果取低地址值为0则是大端模式。
1 int checkSystem( ) 2 { 3 union check 4 { 5 int i; 6 char ch; 7 } c; 8 c.i = 1; 9 return (c.ch ==1); 10 }
例二:
①定义一个共用体变量:union A a1;
②对共用体a1.s赋值为0x1234
③由于共用体成员共用内存,则读取成员变量as.c[0]值,如果是0x34则是小端模式,如果是0x12则是大端模式
1 union A 2 { 3 short s; 4 char c[2]; 5 };
参考链接:
https://www.bilibili.com/video/BV12J41157Z1?from=search&seid=7908928799004699814
参考资料:
《C语言深度剖析》
posted on 2020-12-26 22:41 Darren_pty 阅读(281) 评论(0) 编辑 收藏 举报