大小端模式指的是什么?

大端模式:是数据的高字节保存在底地址中,而数据的底字节保存在高地址中。
小段模式:数据的高字节保存在高地址中,而数据底字节保存在底地址中。
大小端模式_大端模式

为什么会有大小端模式之分?

因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(根据编译器的位数,通过sizeof(long)获取),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节。那么就必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
例如一个16bit的short型X,在存储中的地址为0x0010,X的值为0x1234,那么0x12为高字节,0x34位低字节。对于大端模式,就将0x12存储在低地址中,即0x0010中,0x22存储在高地址中,即0x0011中。小端模式刚好相反。
 

如何判断设备是大小端模式?

 

#include <stdio.h>

// typedef unsigned char byte;

void main()
{
	int a = 0x12345678;
	// 取低地址的值
	char *p = (char *)(&a);
	// 判断低地址的值和低字节的值是否相等
	if (*p == 0x78)
	{
		// 低地址存储低字节的值就是小端模式
		printf("little!\n");
	}
	else if (*p == 0x12) // 判断低地址的值和高字节的值是否相等
	{
		// 低地址的值存储高字节的值就是大端模式
		printf("big!\n");
	}
	else
	{
		printf("other!\n");
	}

	getchar();
}


 

大小端目前的使用情况?

目前Intel的80x86系列芯片是唯一在坚持使用小端的芯片,ARM芯片默认采用小端,但是可以切换为大端;而MIPS等芯片要么采用全部大端的大端存储,那么提供选项支持大端--可以在大小端之间切换。另外,对于大小端的处理也和编译器的实现由关,在C语言中,默认是小端(但在对于一些单片机的实现中确实基于大端,比如Keil 51C),Java是平台无关的,默认是大端的。在网络上传输数据普遍也是大端模式。