`
lhx1026
  • 浏览: 307253 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

[转]浅谈字节序(Byte Order)

    博客分类:
  • ss7
OS 
阅读更多

原文地址:http://www.cnblogs.com/JeffreyZhao/archive/2010/02/10/1667341.html

 

说到程序间的通信,说到底便是发送数据流。我们一般把字节(byte)看作是数据的最小单位。当然,其实一个字节中还包含8个比特(bit)──有 时候我奇怪为什么很多朋友会不知道bit或是它和byte的关系。当我们拿到一系列byte的时候,它本身其实是没有意义的,有意义的只是“识别字节的方 式”。例如,同样4个字节的数据,我们可以把它看作是1个32位整数、2个Unicode、 或者字符4个ASCII字符。

同 样我们知道,在一个32位的CPU中“字长”为32个bit,也就是4个byte。在这样的CPU中,总是以4字节对齐的方式来读取或写入内存,那么同样 这4个字节的数据是以什么顺序保存在内存中的呢?例如,现在我们要向内存地址为a的地方写入数据0x0A0B0C0D,那么这4个字节分别落在哪个地址的 内存上呢?这就涉及到字节序的问题了。

每个数据都有所谓的“有效位(significant byte)”,它的意思是“表示这个数据所用的字节”。例如一个32位整数,它的有效位就是4个字节。而对于0x0A0B0C0D来说,它的有效位从高到 低便是0A、0B、0C及0D——这里您可以把它作为一个256进制的数来看(相对于我们平时所用的10进制数)。

而所谓大字节序(big endian) ,便是指其“最高有效位(most significant byte) ”落在低地址上的存储方式。例如像地址a写入0x0A0B0C0D之后,在内存中的数据便是:

 



 而对于小字节序(little endian) 来说就正好相反了,它把“最低有效位(least significant byte) ”放在低地址上。例如:

 


    对于我们常用的CPU架构,如Intel,AMD的CPU使用的都是小字节序,而例如Mac OS以前所使用的Power PC使用的便是大字节序(不过现在Mac OS也使用Intel的CPU了)。此外,除了大字节序和小字节序之外,还有一种很少见的中字节序(middle endian),它会以2143的方式来保存数据(相对于大字节序的1234及小字节序的4321)。

关于字节序的详细说明,您可以参考Wikipedia里的Endianness条目

  • 大小: 19.5 KB
  • 大小: 18.2 KB
分享到:
评论

相关推荐

    IP、主机字节序、网络字节序、互转

    IP、主机字节序、网络字节序、互转 ------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using ...

    本地字节序和网络字节序.pdf

    在计算机科学中,字节序(Byte Order)指的是多字节数据类型在内存中存储时,其各个组成字节的排列顺序。这一概念对于理解数据在网络传输以及跨平台编程中至关重要。本文将深入探讨本地字节序和网络字节序的概念、...

    浅学字节序——字节序大小端,主机字节序,网络字节序的理解

    - `htons()`:主机字节序转网络字节序(Host to Network Short) 这些函数可以帮助开发者确保数据在发送前已经被正确地格式化,并且在接收后能够被正确解析。 ### 检测主机大小端类型 在C语言中,可以通过编写...

    字节序与位序

    字节序(Byte Order)和位序(Bit Order)是计算机系统中两个重要的概念,它们决定了计算机系统如何存储和处理多字节整数。在本文中,我们将详细介绍字节序和位序的定义、类型、特点以及在计算机系统中的应用。 ...

    Host-byte-order-to-network-.rar_byte order_doc

    **网络字节序(Network Byte Order)** 网络字节序是互联网协议如TCP/IP定义的标准字节顺序,它采用大端字节序,也被称为“网络字节序”。这样做的目的是确保不同架构的计算机系统之间能无歧义地交换数据。 **主机...

    网络字节序和主机字节序

    网络字节序和主机字节序 在计算机科学中,字节序(Endianness)是指整数在内存中保存的顺序。不同的 CPU 有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序。 常见的有两种字节序:...

    络字节序、地址转换源代码

    在计算机网络中,数据传输涉及一个关键的概念:字节序,即字节在网络中的顺序。字节序分为两种类型:大端字节序(Big-Endian)和小端字节序(Little-Endian)。理解这两种字节序对于进行跨平台的网络通信至关重要,...

    大小端字节序介绍几转换

    上述两个示例代码均实现了将一个16位的端口号`6000`从主机字节序转换为网络字节序,然后再将其转回主机字节序的过程。输出结果表明转换过程正确无误。 #### 六、总结 掌握大小端字节序以及网络字节序的相关知识对于...

    TIA博途-字节Byte转换成双字Dword全局FC库文件-V17版本-GF-Byte-To-Dword.zip

    在本资源中,我们关注的是一个特定的函数库,用于实现字节(Byte)到双字(Dword)的数据转换。 字节(Byte)是计算机存储和处理数据的基本单位,通常一个字节包含8位(bit)。在西门子的S7系列PLC中,字节常用于...

    字节数组流byte文件

    标题“字节数组流byte文件”中涉及的概念是字节数组流(byte array stream),这是一种在计算机程序中处理二进制数据的方式。字节数组流通常用于在内存中传输和接收字节数据,尤其在处理文件、图片、PDF、Excel或...

    android byte字节数组转换十六进制字符串

    在Android中,通常不需要担心这个问题,因为byte数组通常不涉及字节序。 总结,Android中将字节数组转换为十六进制字符串的方法多种多样,可以根据项目需求和性能要求选择合适的方式。在开发过程中,了解并熟练掌握...

    c#中string转换成字节byte的处理方法

    在C#编程语言中,字符串(string)与字节(byte)之间的转换是常见的操作之一。这类转换在处理网络通信、文件读写等场景时尤为常见。本文将详细介绍如何在C#中实现从string到byte及byte[]的有效转换,并探讨其中涉及...

    4BYTE转换成float型代码

    1. **字节序**:4字节的数据可能是大端序(Big-Endian)或小端序(Little-Endian)。大端序中,最高有效字节位于最低地址,而小端序则相反。不同平台的字节序可能不同,因此在转换前需要考虑字节序对齐问题。 2. **...

    单字节 多字节 双字节 相互转换

    单字节字符编码(Single Byte Character Set,SBCS)是一种字符编码方式,每个字符只占用一个字节。这是最简单的一种字符编码方式,适用于英语和其他使用拉丁字母的语言。单字节字符编码的优点是占用空间小,查找和...

    stm32f103的4字节转float和float转4字节代码

    STM32F103通常是小端字节序,但如果你需要在不同字节序的系统间交换数据,可能需要进行字节序转换,例如使用`ntohl`(网络字节序到主机字节序)和`htonl`(主机字节序到网络字节序)函数。 以上就是关于STM32F103上...

    利用宏将网络字节序和主机字节序ip格式化输出方法

    利用宏将网络字节序和主机字节序ip格式化输出为字符串ip

    Java整型数与网络字节序byte[]数组转换关系详解

    "Java整型数与网络字节序byte[]数组转换关系详解" 本文主要介绍了Java整型数与网络字节序byte[]数组之间的转换关系,包括整型数到byte[]数组的转换和byte[]数组到整型数的转换。这些转换关系在Java和C/C++之间的...

    JAVA网络字节序转换1

    6. **网络字节序(Network Byte Order)**: 在网络通信中,为了确保不同平台间数据交换的一致性,TCP/IP协议栈规定使用Big-Endian作为网络字节序,也称为网络标准字节序。因此,当Java程序发送或接收网络数据时,...

    image与字节数组byte的互转

    在计算机编程中,图像数据通常以二进制形式存储,其中最常见的表示方式是字节数组(byte array)。在处理图像时,有时我们需要将图像文件转换为字节数组,以便于在网络上传输或者存储在数据库中。反之,我们也可能...

    易语言字节集转换到字节型数组源码

    字节集(ByteSet)是一种可以动态增长或缩小的、用来存储任意长度二进制数据的数据结构,而字节型数组(ByteArray)则是一个固定长度的数组,每个元素都是一个字节。在处理二进制数据,如文件读写、网络传输等场景时...

Global site tag (gtag.js) - Google Analytics