DSP

大端模式和小端模式的区别

2019-07-13 15:07发布

1、什么是大端和小端?

1) 大端模式就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 2) 小端模式:是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
举一个例子,比如数字0x12 34 56 78在内存中(假设从地址0x4000开始存放)的表示形式为: 内存地址 小端模式存放内容 大端模式存放内容 0x4000 0x78 0x12 0x4001 0x56 0x34 0x4002 0x34 0x56 0x4003 0x12 0x78


2、为什么要采用大端和小端?

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

3、怎么实现处理器是大端还是小端?

解题思想:用一个整型变量保存一个初值,然后在用一个指针指向这个变量的首地址,在判断指针首地址里面的值是否为0x12或者末尾地址里面的值,这样就可以判断出当前的机器是大端模式还是小端模式。
图1 程序源代码 其运行结果如图2所示:

图2 运行结果 从上面的输出结果可以看出,整型数a的高位放在较小地址里面,地址低位放在较大地址里面,所以也就看以判断出当前机器是大端模式了。