码迷,mamicode.com
首页 > 其他好文 > 详细

从大端小端开始

时间:2015-06-12 22:18:47      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

首先附下百科的解释。
大端模式:数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式:数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
概念上并不难理解,只是有时容易混淆。
个人的记忆方法是:将数据当做一个字符串顺序处理,从左往右看,如果每个字符(数据)对应的地址变大则为大端;反之则为小端。
 
为什么有大端小端:
电脑的内存单元是一个字节,而int、short等类型的大小不止一个字节。
于是int的4个字节在内存地址中是按照数据高字节对应高地址、低字节对应低地址(即高高低低)或高低低高分为了小端和大端。
 
测试本机为大端小端的方法:
网上看到的做法,多是用union来做的。
技术分享
 1 #include <stdio.h>
 2 int main(int argc, char **argv)
 3 {
 4     union{
 5         int a;
 6         short b;
 7     }u;
 8     u.a = 0x12345678;
 9     printf("%x\n", u.b);
10     if(u.b == 0x1234)
11         printf("大端");
12     else if(u.b == 0x5678)
13         printf("小端");
14     else
15         printf("Error");
16     return 0;
17 }
View Code

 

这里也重温了C语言中的union这种数据类型。因为根本没用过,所以早已忘了。

这种类型最大的特点是所有成员共享同一块内存空间,编译程序保证分配给联合的内存能够容纳其最大的成员变量。

对其中一个成员赋值时,所有其他成员的值也会被覆盖。当然char类型只会覆盖int类型的部分值。

因此在这里给a赋值时,b的值也变了。而int和short的字节数不同,于是能看出大端小端。

 

 

 

从大端小端开始

标签:

原文地址:http://www.cnblogs.com/yzbyzz/p/4572661.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!