测试电脑的存储方式(大端or小端)

测试电脑的存储方式(大端or小端)探究电脑存储机制是大端模式还是小端存储模式,首先就该知道什么是大端和小端模式???


    计算机存储数据(如一个int型)时分为大端存储和小端存储两种方式;


    小端存储方式:低地址存储低字节数据,高地址存储高字节数据。

    大端存储方式:低地址存储高字节数据,高地址存储低字节数据。

测试电脑的存储方式(大端or小端)什么是内存的高低地址呢???

以图为例:

测试电脑的存储方式(大端or小端)

假如在栈上分配一个char buff[4],那么数组变量在栈上如何分布,依然是直接上图,废话不多说:

测试电脑的存储方式(大端or小端)

测试电脑的存储方式(大端or小端)弄清了高低地址,在讨论下高低字节。

测试电脑的存储方式(大端or小端)

下面图是我从网上这是你过来的,原理是一样的,舍不得给他删了,也留着吧。

小端存储方式示意图(如下):

测试电脑的存储方式(大端or小端)

测试电脑的存储方式(大端or小端)了解了大端和小端的概念和内存的空间分布,下面设计方法测试电脑的存储方式。


测试方法


    1. 定义一个包含int型变量 和 char型变量的联合体union 

    2. 将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;
}

测试电脑的存储方式(大端or小端)

方法二

    将整形变量强制转换为(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说明是大端存储
}

测试电脑的存储方式(大端or小端)到这里就搞清楚计算机对于字节的存储机制了,大端还是小端去测试一下吧

上一篇:SAP从R2 R3版本,演绎到ECC6 版本,并坚持20年不变版本而增发补丁EHP1-EHP8


下一篇:如何快速完成MaxCompute 导入数据?