Darren_pty

导航

用Union体测试处理器大小端

如何将多个字节安排到内存中去?大端对齐和小端对齐两种方式

 

大端模式Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。(查看内存通常是:左高右低)int i=1; BE: 00 00 00 01

 

 

 

小端模式Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中 。int i=1; LE: 01 00 00 00

 

 

利用union类型数据的特点:所有成员的起始地址一致。对 union 型的成员的存取都是相对于该联合体基地址的偏移量为 处开始, 也就是联合体的访问不论对哪个变量的存取都是从 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  阅读(264)  评论(0编辑  收藏  举报