首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux基础(字节序是什么鬼)

在刚刚结束的佛职院实训项目中,涉及有关网络编程的概念,有一两个同学在Q上问到字节序的问题,今天就这个话题,来详细聊聊字节序这个小鬼究竟是啥意思。...首先,所谓的字节序有两种情况:大端序和小端序,怎么个意思呢? 先来背两个单词:big endian 和 little endian。正是他们,分别被翻译为专业术语大端序和小端序。...注意到,对一个多字节变量的权位的不同解释方式,就是所谓字节序。...既然我们无法得知对方的的字节序,我们就做出如下规定:凡是向网络发送数据,一律转成大端序。 有了这个规定,通信双方就心里有谱啦!看我的手绘图: ?...例如,htons( )就是专门用来将本地主机16位短整型数据转化为网络字节序的。 现在,该明白什么是字节序,以及单机编程不需要考虑它,而网络编程需要考虑了吧。

2.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

音频字节序

1 字节序 字节顺序是指占用内存多于一个字节类型的数据在内存中的存放顺序,有小端、大端两种顺序。 BIG-ENDIAN:大端,将高字节数据存放在低地址处,低字节数据存放在高地址处。...注意:字节序是面向多字节类型定义的,比如2节、4节、8节整型、长整型、浮点型等,单字节的字符串一般不用考虑。...3 网络字节序 网络字节序是指数据在网络上传输时是大端还是小端的,在Internet的TCP/IP协议规定了一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释...网络字节顺序采用 大端 字节序。 4 Java字节序 JAVA字节序指的是在JAVA虚拟机中多字节类型数据的存放顺序,JAVA字节序也是 大端 字节序。...、ByteBuffer等于字节序相关的类,我们也可以改变JVM中默认的字节序

88385

网络字节序与主机字节序转换

1.网络字节序与主机字节序Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰了解以下几个概念。 字节序,顾名思义,指字节在内存中存储的顺序。...下面以32位位宽数值0x12345678为例,小端字节序与大端字节序具体的存储区别如下所示: image.png 主机字节序,即CPU存储数据时采用的字节顺序。...不同的CPU设计时采用的字节序是不同的,谈到字节序的问题,必然牵涉到两大CPU派系。...2.网络字节序与主机字节序的相互转换 2.1常用系统调用 Linux socket网络编程中,经常会使用下面四个C标准库函数进行字节序间的转换。...高低位 [2]htonl(3) - Linux man page [3]如何在C ++中的big-endian和little-endian值之间进行转换?

5.2K31

网络字节序与主机字节序的转换

查看这些函数的解析,会发现这些函数其实是与主机字节序和网络字节序之间转换有关。就是什么网络字节序,什么是主机字节序呢?...,htonl函数的作用是把一个主机字节序转换为网络字节序,也就是上面转换过程中第二步转换为第三步的作用,127.0.0.1的主机字节序是2130706433,把主机字节序2130706433转换为网络字节序就是...下面再看端口的主机字节序与网络字节序的转换。以6000端口为例。...更多字节序介绍,请参见: 字节序问题--大端法小端法 字节序(Endian),大端(Big-Endian),小端(Little-Endian) API SOCKET基础 (一) TCP建立连接并通信 (...二) UDP通信 (三) 网络字节序与主机字节序的转换 (四) TCP SOCKET recv的内存情况 (五) 异步套接 (六) CAsyncSocket 与 CSocket 转载声明: 本文转自

1.1K20

节序转换详解

在跨平台和网络编程中我们经常会提到网络字节序和主机字节序,如果没有正确对两者进行转换,从而导致两方产生了不同的解释,就会出现意想不到的bug。...目录 0x01 概念 0x02 分类 0x03 两种字节序之间的区别 0x01 概念 字节序,就是大于一个字节类型的数据在内存中的存放顺序。...注:网络字节序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释,网络字节序采用大端排序方式。...0x02 分类 字节序经常被分为大端和小端两种 Big-Endian(大端):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。...0x03 两种字节序之间的区别 通常我们的主机字节序是小端字节序,网络字节序是大端字节序,但是为什么要进行转换呢,如果不转换的话会发生什么,我们这里用一个不是很恰当的方式来解释一下。

1.2K30

理解字节序

一、字节序计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)比如数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11。...大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存。...二、为什么会有小端字节序答案是,计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。但是,人类还是习惯读写大端字节序。...如果是大端字节序,先读到的就是高位字节,后读到的就是低位字节。小端字节序正好相反。四、总结"只有读取的时候,才必须区分字节序,其他情况都不用考虑。"...处理器读取外部数据的时候,必须知道数据的字节序,将其转成正确的值。然后,就正常使用这个值,完全不用再考虑字节序。即使是向外部设备写入数据,也不用考虑字节序,正常写入一个值即可。

29110

Networks 16 - 字节序

节序节序分为大端字节序(big endian)和小端字节序(little endian)....大端字节序是指一个整数的高位字节存储在内存的低地址处, 小端字节序是指一个整数的高位字节存储在内存的高地址处....我们可以通过下面的方式去查看本机的字节序. union { char a[4]; int b; } 现在的PC大多采用小端字节序, 因此小端字节序也被称为主机字节序....所以我们约定在网络中传递的时候都是使用大端字节序, 因此大端字节序也被称为网络字节序, 他给所有接受数据的主机提供了一个正确解释收到的格式化数据的保证....Linux提供了如下的四个函数来完成主机字节序和网络字节序之间的转换: #include unsigned long int htonl(unsigned long int

34530

理解字节序

计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。...同理,0x1234567的大端字节序和小端字节序的写法如下图。 ? 2. 我一直不理解,为什么要有字节序,每次读写都要区分,多麻烦!统一使用大端字节序,不是更方便吗?...但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,比如网络传输和文件储存。 4. 计算机处理字节序的时候,不知道什么是高位字节,什么是低位字节。...如果是大端字节序,先读到的就是高位字节,后读到的就是低位字节。小端字节序正好相反。 理解这一点,才能理解计算机如何处理字节序。 5....字节序的处理,就是一句话: "只有读取的时候,才必须区分字节序,其他情况都不用考虑。" 处理器读取外部数据的时候,必须知道数据的字节序,将其转成正确的值。

67870

python0074节序_byte_order_struct_pack_大端序_小端序

节序这前后颠倒的问题 涉及到 一个东西叫做字节序byte order​添加图片注释,不超过 140 (可选)这些可选的修饰字符 暗示字节的次序字节次序有两种符号英文名称中文名称big-endian大字节序​添加图片注释,不超过 140 (可选)把这个修饰字节序的字符放在类型h(short)前面 h : big-endian...最低有效位(least significant byte)放在低地址 a​添加图片注释,不超过 140 (可选)这是目前常用的指令集架构 ($x86、x86-64$) 用的字节序 CISC(复杂指令集...)落在高地址​添加图片注释,不超过 140 (可选)这是目前 RISC 指令集架构 (RISC、MIPS) 用的字节序 也是我们看起来比较顺的字节序这两个单词怎么来的呢?...python默认字节序​添加图片注释,不超过 140 (可选)python默认用 小端字节序​添加图片注释,不超过 140 (可选)生活细节除了磕鸡蛋之外 鸡蛋放置也很有讲究​添加图片注释,不超过

17440

linux网络编程之socket(一):socket概述和字节序、地址转换函数

各种socket地址结构体的开头都是相同的,对于unix 的某些实现来说 前8位表示整个结构体的长度,后8位表示地址类型,而Linux就没有长度字段,前2个字节都是地址类型。...printf("%x %x %x %x\n", p[0], p[1], p[2], p[3]);     return 0; } 输出为: simba@ubuntu:~/Documents/code/linux_programming... addr;     printf("%s\n", inet_ntoa(ipaddr));     return 0; } 输出为: simba@ubuntu:~/Documents/code/linux_programming...四、套接类型 流式套接(SOCK_STREAM) 提供面向连接的、可靠的数据传输服务,数据无差错,无重复的发送,且按发送顺序接收。 数据报式套接(SOCK_DGRAM) 提供无连接服务。...原始套接(SOCK_RAW) 参考: 《Linux C 编程一站式学习》 《TCP/IP详解 卷一》

1.9K00

Python中的文本和字节序

计算机进行数据处理时,一次存取、加工和传送的数据长度称为(word)。一个通常由一个或多个(一般是字节的整数位)字节构成。...例如286微机的由2个字节组成,它的字长为16;486微机的由4个字节组成,它的字长为32位机。 字长 字长是指cpu的每个字所包含的位数。根据计算机的不同,字长有固定的和可变的两种。...'utf-8' codec can't decode byte 0xe9 in position 5: invalid continuation byte 原因在于utf_8检测到c不是有效utf_8符串...需要注意:TCP/IP协议规定网络字节序为大端字节序。这意味着主机字节序如果是小端存储必须转化为大端字节序才能通过网络发送数据。...; 否则, 返回未经修改的 filename 字节序列。

1.9K30

Linux网络套接(二)

返回值:返回一个新的套接描述符。...首先是写出服务器的代码,代码的思路是这样的: ①首先为服务器创建套接,因为这个是TCP协议,TCP是面向连接的,因此服务器是需要进入监听状态才能让客户端连接,所以使用socket接口创建出来的套接是属于监听套接...=2) { Usage(argv[0]); return 1; } //tcp_server //1.创建套接,此套接为监听套接,用于绑定和监听 int listen_sock...peer,&len); if(new_sock<0) { continue; } //显示是哪给客户端连接了服务器:ip和端口号 //ntohs:由网络字节序转为主机序列...peer,&len); if(new_sock<0) { continue; } //显示是哪给客户端连接了服务器:ip和端口号 //ntohs:由网络字节序转为主机序列

1.9K30

谈一谈字节序的问题

前言 字节序关系到我们的网络数据能否被正确地解析或使用。那么什么是字节序?又怎么处理字节序的问题呢?本文就来谈一谈字节序的问题。 什么是字节序节序指的是多字节的数据各字节的存储顺序。...在几乎所有计算机中,多字节数据被存储为连续的字节序列。...例如,一个4节的int类型变量a,其存储的起始地址为0x804900,那么a的四个字节将被分别存在0x804900,0x804901,0x804902,0x804903的位置。...为什么不统一节序 既然每次都发送网络数据之前都要转换,为什么不统一节序呢?实际上,大小端各有优劣: 计算都是从低位开始的,因此计算机内部处理采用小端序,效率较高。...通过前面的介绍和分析,我们总结出以下几点: 不同处理器之间采用的字节序可能不同。 有些处理器的字节序是确定的,有些处理器的字节序是可配置的。 网络序一般统一为大端序。

75430

Python数据结构——字节序

节序列是一种非常重要的数据结构,它在Python中具有广泛的应用,用于处理二进制数据、文件I/O、网络通信等。...本文将详细介绍Python中字节序列数据结构的使用,包括字节串(bytes)、字节数组(bytearray)和内存视图(memoryview),并提供示例代码来说明它们的用途。...总结 字节序列是一种非常重要的数据结构,用于处理二进制数据、文件I/O、网络通信等。...了解这些字节序列数据结构及其应用场景将有助于你更好地处理各种编程问题,从文件处理到网络通信,都需要字节序列来处理二进制数据。...无论是在系统编程、网络编程、数据处理还是加密算法中,字节序列都是一个不可或缺的工具。

18010
领券