主机字节序和网络字节序(大端序,小端序,网络序)

根据cpu的不同我们可以把主机字节序在内存中存储的顺序叫做主机序,也就是我们常说的,大端机和小端机。我们经常看到的有两种:

1.小端机(内存中以小端序存储的机器);将低字节序存储在开始的地址(及内存较小的内存)

2.大端机(内存中以大端序存储的机器):将高字节序存储在开始的的地址

举个例子:我们将内存从左到右排列:在内存中存放0x01020304

             2000     2001    2002     2003

小 : 04             03         02           01

大: 01               02         03          04

(我们熟悉的x86系列的cpu都是小端序)

网络字节序就不一样了,它是tcp/ip中规定好的一种表示数据的格式,没有什么大端小端之分。跟cpu和操作系统都没关系。只是为了保证数据在不同的操作系统之间能够正确的传递共享。网络字节序是用的大端序模式。所以在我们用的小端机中如果伴随着信息的传递,就会有大端序,小端序之间的转换。当然这都是系统内部的好函数自己来完成的。

时间: 2024-10-24 04:09:32

主机字节序和网络字节序(大端序,小端序,网络序)的相关文章

大端、小端与网络字节序

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

大端与小端,大尾与小尾,高尾端与低尾端,主机字节序与网络字节序

概念剖析 一时记忆与理解大端.小端的概念很容易,但时间一长,对于相似的概念人类的记忆向来是模糊的,甚至是换位的.所以除非你的记忆非常牢靠,否则借助大端和小端这样的名字,你很难将概念与内容联系紧密. 也有文章提到用大尾与小尾的概念,个人觉得这个概念还是没有解决存储概念中的基本问题,大与小还是没有脱离以前的概念,但是引入了尾的概念,已经比大端与小端要更清晰一点. 目前对于记忆大小端,我觉得这篇文章中提到的高尾端/低尾端名词记忆方法比较科学.形象.实话说,当时计算机科学著作翻译Big Endian与S

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

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

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

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

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

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

如何判断主机是大端还是小端(字节序)

[转帖来自]:http://blog.csdn.net/forestlight/article/details/6933528 今天看<linux程序设计>中关于跨平台需要注意的事项,看到了大端小端的问题.突然想起实验室一同学的笔试题,如何判断主机的大端还是小端. 所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址.比如0x12345678在大端机上是12345678,在小端机上是78564312,而一个主机是大端还是小端要看cpu类型以及运行在上面的操作系统.同一款

用C语言,如何判断主机是 大端还是小端(字节序)

所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址.比如 0x12345678 在大端机上是 12345678,在小端机上是 78564312,而一个主机是大端还是小端要看CPU类型以及运行在上面的操作系统.同一款CPU在不同的操作系统使用的大小端情况是不同的.当然我们通常使用的 x86 + windows是小端. 测试大小端一般使用 union的特性.union是一个联合体,所有变量公用一块内存,只是在不同的时候解释不同.其在内存中存储是按最长的那个变量所需要的位数来

【网络编程系列】一:字节顺序的大端与小端表示法

一.字节序 字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序. 在几乎所有的机器上,多字节对象都被存储为连续的字节序列.例如:如果C/C++中的一个int型变量 a 的起始地址是&a = 0x100,那么 a 的四个字节将被存储在存储器的0x100, 0x101,0x102, 0x103位置. 根据整数 a 在连续的 4 byte 内存中的存储顺序,字节序被分为大端序(Big Endian) 与 小端序(Little Endian)两类. 然后就牵涉出两大CPU派系: Motoro

网络字节码、本地字节码(大端,小端)

大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的<格利佛游记>:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战.战争的原因:大家都知道,吃鸡蛋的时候,原始 的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须 先打破鸡蛋较小的一端,违令者重罚.然后老百姓对此法令极为反感,期间发生了多次叛乱,其中一个皇帝因此送命,另一个丢了

字节存储排序:大端和小端的判别及转换

当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是端(endian)的问题应运而生了,对于不同的存储方法,就有大端(big-endian)和小端(little- endian)两个描述. 字节排序按分为大端和小端,概念如下 大端(big endian):低地址存放高有效字节 小端(little endian):低字节存放地有效字节 现在主流的CPU,intel系列的是采用的little endian的格式存放数据,而moto