六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 259|回复: 0

(原创)确认大端模式或小端模式(最直接有效的方法)

[复制链接]

升级  76%

50

主题

50

主题

50

主题

秀才

Rank: 2

积分
164
 楼主| 发表于 2012-12-12 23:11:34 | 显示全部楼层 |阅读模式
(原创)确认大端模式或小端模式(最直接有效的方法)

<div id="cnblogs_post_body">预备课:深刻理解大端模式与小端模式的概念。

大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节存放在高地址中。
小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节存放在低地址中。

例:0x12345678在内存中的存储为例:
大端模式内存布局:
| 0x78 | 0x56 | 0x34 | 0x12 |
--------------->高地址

小端模式内存布局:
| 0x12 | 0x34 | 0x56 | 0x78 |
--------------->高地址

但我们如何判别当前系统为大端模式还是小端模式呢?

方法1:
INT32U i = 0x12345678;
INT8U *p = (INT8U *)(&i);
if(p[0]==0x12)
  printf("Big_endian");
else
  printf("Little_endian");

注:方法1为个人觉得为最直接有效的方法,推荐!

方法2:
判别当前系统为大端模式还是小端模式有很多种方式,比如利用union型数据概念!
union型数据所占的空间等于其最大成员所占的空间,对union型成员存取都从相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问对哪个变量的存取都是从union的首地址位置开始。

int checksystem(void)
{
  union check{
  int i;
  char ch;
  }c;
  c.i= 1;
  return (c.ch==1);
}
如果checksystem返回1则为大端模式,返回1为小端模式。

方法3:
除了以上方法外,当然我们可不不利用函数来判定,直接看内存即可,在此就不介绍了。

作者:tdyizhen1314
        (现从事LED行业,专注于户外大型LED显示屏控制系统的研发,希望与大家一起交流,共同进步)
邮箱: 495567585@qq.com  
        td.logic@hotmail.com
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表