探究电脑存储机制是大端模式还是小端存储模式,首先就该知道什么是大端和小端模式???
计算机存储数据(如一个int型)时分为大端存储和小端存储两种方式;
小端存储方式:低地址存储低字节数据,高地址存储高字节数据。
大端存储方式:低地址存储高字节数据,高地址存储低字节数据。
以图为例:
假如在栈上分配一个char buff[4],那么数组变量在栈上如何分布,依然是直接上图,废话不多说:
下面图是我从网上这是你过来的,原理是一样的,舍不得给他删了,也留着吧。
小端存储方式示意图(如下):
了解了大端和小端的概念和内存的空间分布,下面设计方法测试电脑的存储方式。
测试方法:
-
-
定义一个包含int型变量 和 char型变量的联合体union
-
将int型变量强制转换为 char*
-
方法一
由于联合体union的存放顺序是所有成员从低地址开始存放,在一个“联合”内可以定义多种不同的数据类型,一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,已达到节省空间的目的,
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include <stdio.h> #include <stdlib.h> int checkSystem()
{ union check
{
int i;
char ch;
}c;
c.i = 1;
return (c.ch == 1); //c.ch如果等于1,则返回1,否则返回0;
} //返回1说明该计算机是小端存储,相反是大端存储
int main()
{ int a = checkSystem();
printf ( "%d\n" , a);
system ( "pause" );
return 0;
} |
方法二
将整形变量强制转换为(char*),这样就可以以字节为单位进行数据读取了;
例如:
1
2
3
4
5
6
7
8
|
int checkSystem()
{ int v = 1;
if (*(( char *)&v) == 1)
return 1; //返回1说明是小端存储
else
return 0; //返回0说明是大端存储
} |
本文转自 七十七快 51CTO博客,原文链接:http://blog.51cto.com/10324228/1709781