大端法、小端法、网络字节序 转

一般来说,大部分用户的操作系统(如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,则是大端法

时间: 2024-11-03 22:15:14

大端法、小端法、网络字节序 转的相关文章

大端、小端与网络字节序

大端(Big-Endian),小端(Little-Endian)以及网络字节序的概念在编程中经常会遇到,网络字节序(Network Byte Order)一般是指大端(Big-Endian,对大部分网络传输协议而言)传输,大端小端的概念是面向多字节数据类型的存储方式定义的,小端就是低位在前(低位字节存在内存低地址,字节高低顺序和内存高低地址顺序相同),大端就是高位在前,(其中"前"是指靠近内存低地址,存储在硬盘上就是先写那个字节).概念上字节序也叫主机序. 一.大小端概念 1.首先大小

大端法和小端法

引言 在计算机内存中,通常是以字节(Byte),也就是 8 个位(Bit)为基本存储单元(也有以 16 位为基本存储单元的).对于跨越多个字节的数据类型(比如 int 长 4 个字节),如何在内存中对这些字节进行排序有两种常见的方法:大端法(Big-endian)和小端法(Little-endian) [注]首先不管是大端法还是小端法存储,计算机在内存中存放数据的顺序都是从低地址到高地址,所不同的是首先取低字节的数据存放在低地址还是取高字节数据存放在低地址. 基本概念 高位放在低地址就是大端法

关于SimpleMsgPack中swap引发的问题大端法和小端法研究笔记

今天diocp裙中[珠海]-芒果反应了一个关于SimpleMsgPack的问题 msgPack.AsFloat = 2.507182; 经过编码再解码后,会直接触发异常. 因为msgPack的标准,在打包的数据是大端法IEEE 754 下面是msgPack的标准说明 Float format family stores a floating point number in 5 bytes or 9 bytes. float 32 stores a floating point number in

C语言&*符号使用及大端法小端法测试

工具:Microsoft Visual C++ 6.0 例子: int a = 1; int* b = &a; C语言规定a表示存储单元中的数据,&a表示存储单元的地址,b存储的就是a的地址 C语言规定*a代表a中存储的地址对应的存储单元中的数据,所以*b就是等于1 C语言的&*介绍完毕,开始测试本机是大端法,还是小端法? #include <stdio.h> #include <stdlib.h> int main(){ int a = 0x1234567

请讲普通话——一场关于异构平台通信的风波(粘包&#183;大小端方式&#183;网络字节序)

一.引子 前段时间用StriveEngine做一个信息采集系统,服务器是Windows的,客户端是各种单片机,以及Unix等等平台.这些异构的平台,被我召集起来“加强对话, 扩大共识, 深化合作”.都说有人的地方就有江湖,讲真,机器世界也一样!这些异构的平台,平日里各自为政,井水不犯河水,倒也相安无事.如今群雄会盟,共商大计,如我所料,势必会上演一波真正的血雨腥风! 就像新闻联播里常说的,“加强对话, 扩大共识, 深化合作”,首先得“加强对话”吧. 看着各位爷陆续到场,我稍稍清了清嗓子,不揣冒昧

一场关于异构平台通信的风波(粘包&#183;大小端方式&#183;网络字节序)

一.引子 前段时间用StriveEngine做一个信息采集系统,服务器是Windows的,客户端是各种单片机,以及Unix等等平台.这些异构的平台,被我召集起来“加强对话, 扩大共识, 深化合作”.都说有人的地方就有江湖,讲真,机器世界也一样!这些异构的平台,平日里各自为政,井水不犯河水,倒也相安无事.如今群雄会盟,共商大计,如我所料,势必会上演一波真正的血雨腥风! 就像新闻联播里常说的,“加强对话, 扩大共识, 深化合作”,首先得“加强对话”吧. 看着各位爷陆续到场,我稍稍清了清嗓子,不揣冒昧

关于字节序(大端法、小端法)的定义

<UNXI网络编程>定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址.小端存在起始地址,即是小端字节序:大端存在起始地址,即是大端字节序. 也可以说: 1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端. 2.大端法(Big-Endian)就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端. 举个简单的例子,对于整形0x12345678.它在大端法和小端法的系统内中

网络通信之 字节序转换原理与网络字节序、大端和小端模式

原文地址:http://www.cnblogs.com/fuchongjundream/p/3914770.html 一.在进行网络通信时是否需要进行字节序转换? 相同字节序的平台在进行网络通信时可以不进行字节序转换,但是跨平台进行网络数据通信时必须进行字节序转换. 原因如下:网络协议规定接收到得第一个字节是高字节,存放到低地址,所以发送时会首先去低地址取数据的高字节.小端模式的多字节数据在存放时,低地址存放的是低字节,而被发送方网络协议函数发送时会首先去低地址取数据(想要取高字节,真正取得是低

网络通信时字节序转换原理与网络字节序、大端和小端模式

引言:在进行网络通信时是否需要进行字节序转换? 相同字节序的平台在进行网络通信时可以不进行字节序转换,但是跨平台进行网络数据通信时必须进行字节序转换. 原因如下:网络协议规定接收到得第一个字节是高字节,存放到低地址,所以发送时会首先去低地址取数据的高字节.小端模式的多字节数据在存放时,低地址存放的是低字节,而被发送方网络协议函数发送时会首先去低地址取数据(想要取高字节,真正取得是低字节),接收方网络协议函数接收时会将接收到的第一个字节存放到低地址(想要接收高字节,真正接收的是低字节),所以最后双