TODO:字节序的一些理解

本文是小编对字节序的片面理解,希望对你有帮助哈。

字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。

1.Little endian:将低序字节存储在起始地址,俗称小端

2.Big endian:将高序字节存储在起始地址,俗称大端

比如一个0x01020304(左高右低)这个整数,在小端下在内存中的布局如下

[04][03][02][01] 注意左边是低地址,而右边是高地址

在大端下则是

[01][02][03][04] 注意左边是高地址,而右边是低地址。

比较大端,小端的排序,采用大端方式存储数据是比较符合人类的思维习惯。

因为网上有些人对大端,小端的认识不一样;等下小编会写一段golang的代码来论证小端,大端排序的正确性。

网络字节序,是指网络传输的字节序,可能是大端序或者小端序,取决于软件开始时通讯双方的协议规定。TCP/IP协议RFC1700规定使用“大端”字节序为网络字节序,开发的时候需要遵守这一规则。

在现有的平台上Intel的X86采用的是Little-Endian,而像Sun的SPARC采用的就是Big-Endian。在C语言中,默认是小端(在有些单片机的实现中是基于大端,比如Keil 51C),Java是平台无关的,默认是大端,golang也是默认使用大端。不同语言各自采用不同的字节序,相互之间的传递需要进行字节序的转换工作。

最后,附上Golang对大小端的测试代码

输出:

a: 305419896

BigEndian: 12 34 56 78

b: 305419896

c: 305419896

tt: 0x12345678

//tt输出0x123456,则表示Go使用大端。如果需要对小端测试只要把BigEndian改成LittleEndian即可,有兴趣可以试试。



wxgzh:ludong86

时间: 2024-10-13 19:54:05

TODO:字节序的一些理解的相关文章

理解字节序 [Understanding Big and Little Endian Byte Order]

原文地址 (本文对于字节序讲解的很清楚,容易理解.) Problems with byte order are frustrating, and I want to spare you the grief I experienced. Here's the key: Problem: Computers speak different languages, like people. Some write data "left-to-right" and others "rig

最简单的方式教你理解大小端字节序

学过编程的人都应该知道大小端字节序的概念,但是很多时候,总是把他们弄混,这是整理出来的一份很简单的方式理解字节序的文章,废话不多说,这里直接入正题. 什么是字节序? 字节序,简单来说,就是指的超过一个字节的数据类型在内存中存储的顺序 那么就很明显了,像char这样的类型,肯定不存在字节序的问题了. 字节序分为哪几类? 大端字节序: 高位字节数据存放在低地址处,低位数据存放在高地址处: 小段字节序: 高位字节数据存放在高地址处,低位数据存放在低地址处: 网络字节序: TCP/IP协议传输数据时,字

拓展理解字节序

昨天在微信上读到阮老师的讲解字节序的文章 http://www.ruanyifeng.com/blog/2016/11/byte-order.html 阮老师只是表述了:计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian). 以前用C++实现电力遥测远动规约时,用串口和下位机调试时,就遇到过字节序的问题,也不清楚为啥会这样,只是看到了现象. 恰巧刚才阅读<深入理解Java虚拟机>,其中有一段: 这就比较清楚了说明为什么会有字节序的问题,因

理解字节序 大端字节序和小端字节序

1. 计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian). 举例来说,数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11. 大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法. 小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存. 同理,0x1234567的大端字节序和小端字节序的写法如下图. 2. 我一直不理解,为什么要有字节序,每次读写都要区分,多麻烦!统一使用大端字节序,不是更方便吗?

字节序转换与结构体位域(bit field)值的读取 Part 2 - 深入理解字节序和结构体位域存储方式

上一篇文章讲解了带位域的结构体,在从大端机(Big Endian)传输到小端机(Little Endian)后如何解析位域值.下面继续深入详解字节序,以及位域存储的方式. (1) 我们知道,存储数字时,对小端机而言,数字的低位,存在低地址,高位存在高地址.大端机正相反. (2) 读取的方式,也是一样的.对于小端机,读出的低地址位作为数字的低位. (3) 此外Big-Endian/Little-Endian存储顺序,不仅仅针对字节,还针对字节内的比特位.对于小端机而言,字节内的8个比特,低地址端比

彻底理解字节序(未完待续)

假设我们有一个16位整数,那么它是由2个字节组成的. 首先,我们引出一个概念,数据高字节和数据低字节. 特别要强调的是,这里的指的是数据表示形式上的高字节和低字节,不涉及(不依赖)任何存储上的具体实现. 因为后面我就会引入另一个概念,内存低地址和内存高地址. 在讨论字节序问题上,如果文章上来不先把概念特别强调清楚,我们很容易产生混淆.

理解字节序

目前,MAC采用的Intel x86 CPU采用小端字节序,iPhone使用的ARM CPU也是如此.较早的MAC中使用的PowerPC处理器采用大端字节序,一般的,通常会看到不同平台上分别使用不同的字节序.如果使用不正确的字节序读取烽据,会得出混乱且无意义的数字,所以明确字节序非常重要. 实际上,至少还顾虑在另外一种字节序:中间端字节序,在一些较早的,少见的体系结构中,并没有使用前向也没有使用后向顺序,而是采用一种奇怪的混合顺序,对于示例整数305 419 896,会写为{0x34,0x12,

字节序理解

字节序分为:网络字节序.主机字节序 一.主机字节序 Little-Endian,数据高位存在内存高地址,数据低位存在内存低地址 Big-Endian,数据高位存在内存低地址,数据低位存在内存高地址 根据CPU的不同分为:Little-Endian.Big-Endian Little-Endian:X86 Big-Endian:Sun的SPARC Little-Endian操作系统:windows.linux Big-Endian操作系统:unix windows中CSP中要传入传出的数据也是Bi

字节序的理解----C语言和Python语言

字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序.常见的主要有以下2种: 小端序(Little-Endian):低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端.最符合人的思维的字节序,地址低位存储值的低位,地址高位存储值的高位.该序因为从人的第一观感来说低位值小,就应该放在内存地址小的地方,也即内存地址低位,反之,高位值就应该放在内存地址大的地方,也即内存地址高位.在80X86平台上,系统将多字节中的低位存储在变量起始地址,使用小端法. 大端序(B