`
kenby
  • 浏览: 724590 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于大端法和小端法

 
阅读更多

 

typedef union {
	int  n;
	char p[sizeof(int)];
} union_t;

union_t ut;
memset(&ut,0, sizeof(ut));
ut.p[0] = 13;
printf("%d\n", ut.n);
 

输出结果是什么?

 

 

一般来说,大部分用户的操作系统(如windows, FreeBsd,Linux)是Little Endian

的。少部分,如MAC OS ,是Big Endian 的。

 

所谓MSB (Most Significant Byte)就是,一个数字中,最重要的那位,

比如,12004,中文读作,一万两千零四,那最高位的1,就表示了一万,此处就称作MSB,最有意义的位.

而LSB (Least Significant Byte)与MSB相反,个位数4就可以称为LSB,

在草稿纸上演算的时候,我们习惯左边写数的MSB,右边写数的LSB。

 

使用Little Endian方式存储数据时,数据的MSB存放在高地址,LSB存放在低地址

比如 0x11223344 ,它在内存中存储为

44 33 22 11 

低地址-->高地址

使用Big Endian方式存储数据时,数据的MSB存放在低地址,LSB存放在高地址

比如 0x11223344 ,它在内存中存储为

11 22 33 44

低地址-->高地址

 

值得注意的是,大端法和小端法讨论的都是字节与字节之间的顺序,至于一个字节内的8个比特,无论大端法还是

小端法,顺序都是一样的,即右边存储低位,左边存储高位。再看一个例子:

 

已知内存中从低地址到高地址存储的4个字节依次是:

11 22 33 44

求这个数是多少?

关键是找出哪头是MSB,哪头是LSB

 

如果该机器是Little Endian,

则低地址存放的是LSB,所以11是LSB,高地址是MSB,所以44是MSB

所以这个数等于

0x44332211

 

如果该机器是Big endian,

则低地址存放的是MSB,所以11是MSB,高地址是LSB,所以44是LSB

0x11223344

 

这个笔试题的意思是,已知内存中从低地址到高地址存储的4个字节是

0D 00 00 00

使用小端法表示,这个数等于0x0000000D,即13。

 

再引申一个问题,试写一个函数判断机器是否为Big Endian。

思想是取一个short数0x1122的第1个字节,若这个字节等于0x11,则是大端法

 

int is_big_endian()
{
	unsigned short test = 0x1122;
	if(*( (unsigned char*) &test ) == 0x11)
		return 1;
	else
		return 0;
}
分享到:
评论

相关推荐

    基于大端法、小端法以及网络字节序的深入理解

    关于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或...它在大端法和小端法的系统内中,分别如图1所示的方式存放。   网络字节序 我们知道网络上的数据流是

    大端(Big Endian)与小端(Little Endian)简介

    ### 大端与小端表示法详解 #### 一、引言 在计算机科学领域,数据的存储方式是一项基础而重要的技术。对于大于255(即超过一个字节)的整数,需要多个字节来进行存储。这些字节如何在内存中排列,涉及到两种主要的...

    大端(Big_Endian)与小端(Little_Endian)简介

    大端与小端表示法是计算机科学中非常基础但又极其重要的概念,了解并掌握它们有助于开发者编写更加健壮和兼容性更好的程序。无论是进行跨平台编程还是网络通信开发,都需要对数据的字节序有清晰的认识。

    单片机实现CRC32校验C语言算法(大端模式)

    用51系列单片机可实现的CRC32校验c语言算法,经测试通过,准确无误,代码占用量少,完全满足单片机的使用!

    stm32 crc32校验程序 支持32位int整型字节对齐 大小端

    在小端系统中,低字节存储在内存地址较低的位置,而在大端系统中,高字节位于低地址。为了确保程序在大小端系统上都能正确工作,你需要在写入数据到CRC单元前,根据系统字节序进行适当的调整。例如,对于32位整型,...

    3.信息的表示和处理(上)1

    字节顺序分为大端法和小端法。大端法中,最高有效字节存储在低地址,而小端法则相反,最低有效字节存储在低地址。Intel兼容机通常使用小端法,而IBM和Sun公司的某些机器采用大端法。现代处理器如ARM支持双端法,但...

    大端(Big Endian)与小端(Little Endian)简介.doc

    总的来说,大端和小端模式是计算机系统中处理多字节数据的一种基础方式,对于编程和系统设计有着深远的影响。了解和掌握这两种模式对于进行跨平台编程、网络通信和理解底层系统工作原理至关重要。

    ccf.rar_除法

    1. **数值表示**:在单片机中,大数值可能需要使用多个字节来存储,这涉及到二进制补码表示、字节顺序(如大端序或小端序)以及如何组合这些字节以形成完整的数值。 2. **除法算法**:常见的长除法算法包括迭代法和...

    Macro-test-mode-test-system.zip_endian_little endian

    Endianness 主要分为两种:大端法(Big Endian)和小端法(Little Endian)。这个名为 "Macro-test-mode-test-system.zip_endian_little_endian" 的压缩包文件是为了帮助用户检测他们的个人计算机(PC)使用的是哪种...

    C++与操作系统等面试题67

    根据字节序的不同,可以分为两种主要的形式:大端模式(Big Endian)和小端模式(Small Endian)。 **大端模式**: - 在大端模式下,数据的高字节存储在内存的低地址中,而数据的低字节则存储在内存的高地址端。 - ...

    计算机结构实验一.pdf

    实验步骤包括在VC 6.0++环境中编写和编译程序,然后在大端和小端机器上执行,观察和分析结果。实验结果部分应包含实验一和实验二的具体输出,以及实验三的手动推导过程。 源代码中包含了几个关键函数,如`show_...

    深入理解计算机系统(原书第2版)

    《深入理解计算机系统》中提到了两种常见的字节序表示方法:大端法(Big Endian)和小端法(Little Endian)。 - **小端法**:小端法是一种数据存储方式,其中低字节数据存储在低地址处,高字节数据存储在高地址处...

    CRC校验总结 个人总结 包括源码

    对于不同的字节流顺序,CRC的计算方法也会有所不同,例如小端序和大端序。小端序是指数据的低位字节在前,高位字节在后,而大端序则相反。 计算CRC的方法主要有几种: 1. 直接计算:通过执行多项式除法的每一步,...

    深入理解计算机系统复习参考 (1).docx

    它分为大端法(Big-Endian)和小端法(Little-Endian)。大端法将数据的高位字节存储在低地址,而小端法则相反,低位字节存储在低地址。例如,一个十六进制值0x01234567在大端法中从0x100开始的地址分布为0x01 0x23 ...

    数控车床加工工艺编程-车削外圆椎.ppt

    其中,a/2表示圆锥半角,C为锥度,D为圆锥大端直径,d为圆锥小端直径,L为圆锥大端直径与小端直径处的轴向距离。正确计算这个角度对于获得准确的锥度至关重要。 车刀的装夹是保证加工精度的基础。工件的回转中心...

    天津理工大学中加专业计算机结构实验一:数据和程序的机器级表示实验报告(附截图)

    1. **理解计算机数据表示和存储的方式**:学习二进制编码系统、字节顺序(小端法/大端法)、整数和浮点数的不同表示方法等。 2. **通过高级语言编程了解基本程序的机器级表示**:利用C语言或其他高级语言实现特定...

    浮点数与4字节数值相互转换工具

    需要注意的是,不同的计算机架构可能有不同的字节顺序(比如大端序和小端序),这会影响浮点数如何在内存中存储和解析。因此,在进行跨平台数据交换时,需要考虑字节序问题,确保正确解读4字节数值。 总的来说,...

    16版自考02318计算机组成原理重点总结提纲有(已排版).pdf

    8. **数据存储顺序**:大端法和小端法决定了数据在内存中的存储顺序,大端法将高有效位放在低地址,小端法则反之。 9. **数码校验**:奇偶校验、海明校验和CRC码用于检测数据传输或存储中的错误。奇偶校验简单但...

Global site tag (gtag.js) - Google Analytics