大端存储法小端存储法特点
㈠ 大小端存储
在计算机系统中,存储是以字节为单位的,每个地址单元都对应着一个字节,一个字节=8bit。在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器)。对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,如何安排多个字节的存储,这就有了大端存储模式和小端存储模式。
小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址。
大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。
如果将一个16位的整数0x1234存放到一个短整型变量(short)中。这个短整型变量在内存中的存储在大小端模式由下表所示。
C语言判断大小端模式
方法一:
voidIsBigEndian()
{
shortinta=0x1122; //十六进制,一个数值占4位charb = *(char*)&a;//通过将short(2字节)强制类型转换成char单字节,b指向a的起始字节(低字节)
if( b ==0x11) //低字节存的是数据的高字节数据
{
//是大端模式
}
else
{
//是小端模式
}
}
方法二:
voidIsBigEndian() //原理:联合体union的存放顺序是所有成员都从低地址开始存放,而且所有成员共享存储空间
{
uniontemp
{
shortint a;
char b;
}temp;
temp.a=0x1234;
if(temp.b==0x12) //低字节存的是数据的高字节数据
{
//是大端模式
}
else
{
//是小端模式
}
}
参考:https://www.jianshu.com/p/152268b0ea19
㈡ 大端存储和小端存储哪个与人阅读有关
大端存储。
1、大端存举衡搏帆储方式和阅读习惯相同,可以直接读作正银做12345678。
2、而小端,则与逻辑习惯相同,因为小端存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和逻辑方法一致。
㈢ 大端模式和小端模式
具体如下:
1、大端模式:
大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式类似于把数据当作字符串顺序处理。
地址由小向大增加,而数据从高位往低位放;小端模式,是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
在大端模式下,前16位应该这样读: e6 84 6c 4e ( 假设int占4个字节)。
记忆方法: 地址的增长顺序与值的增长顺序相反。
2、小端模式例子:
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000。
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000。
在小端模式下,前16位应该这样读: 4e 6c 84 e6( 假设int占4个字节)。
记忆方法: 地址的增长顺序与值的增长顺序相同。
大小端模式:
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 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处理器还可以由硬件来选择是大端模式还是小端模式。
㈣ 大端和小端存储法是什么两者有什么区别
小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址。
大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。
大端模式就是低位存放在高地址上。高位存放在地址上。
小端模式就是地位存放在低地址上。高位存放在高地址上。
例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:
内存地址 0x4000 0x4001
存放内容 0x34 0x12
而在Big-endian模式CPU内存中的存放方式则为:
内存地址 0x4000 0x4001
存放内容 0x12 0x34
㈤ 大端存储和小端存储各自的优缺点是什么
没有什么优缺点.
最好输入输出流,程序一致用同一种方式,全用big endian,或 little endian. 省去byte 交换。
㈥ 大端存储法与小端存储法有什么不同
大端排序的好处是接收数据的程序可以优先得到数据的最高位,以便快速反应。
比如我有一个控制温度的上位机程序,该程序接收大端方式编码的温度信号0x00fe,对比原来的温度值,假设是0x0135。那么在接受第一个字节0x00的时候,上位机就可以判断温度比原来下降了,可以立即发出指令打开加热器。而对于小端排序的方式,上位机只有在接收到完整的两个字节的时候才能做出反应。如果采用串行通信,用只对信号的每一个字节单独校验的话,波特率为9600时,大端编码下,上位机的响应时间为1ms,小端排序方式下,上位机响应时间为2ms。这时,大端编码就比小端排序更快。如果需要对完整的通信包进行校验,则没有区别。
在串行通信测试程序中,计算机显示的字节顺序一般就是接收顺序。如果用大端编码的话,测试程序直接就可以显示出从大到小排列好的数据。而小端排序的方向相反,可视性不好,容易看花眼掉。
结论是:1、串行通信(包括以太网、wifi、串口、usb等)如果采用大端编码有时会使系统响应更快速。2、串行通信采用大端编码有利于调试。
小端排序下,选定一个数据的起点后,只需要重复进位加法就可以实现高精度加法计算。减法也是一样。数组的第0位固定是最低位。而大端方式下,如果高精度计算的精度可变,就很难确定数组的第0位到底代表多大。不同精度的计算还会产生数据对齐问题。比如早期的16位cpu中,int类型和long类型做加法,用小端排序就很容易从指针位置开始计算。而大端排序则非常复杂。加法运算是非常常用的运算,其性能直接影响程序的整体性能。所以cpu中要采用性能较好的小端排序。
由于cpu本身是小端排序,如果内存和文件也采用小端排序的话,就可以把文件中的数据直接存储到内存中,再直接把内存中的数据存储到cpu的寄存器。这样不仅提高计算机的性能,程序也变得简单。
结论是:所有直接与硬件有关的代码都适合按小端排序
㈦ 大端模式和小端模式的区别及如何判断的存储器的模式
一个数需要超过一个字节来存储时,就有大端和小端的区别,只用一个字节时,无所谓大小端
低位的放在低地址,也就是小个在前,叫小端,反之叫大端
c和c++需要面对这样的问题,java等高级语言已经屏蔽这个差异,不需要额外处理
在c中,可以用以下代码片段来判断是大端还是小端
union {char c; int i;} u;
u.i = 1;
if(u.c == 1){//小端}
else{//大端}