首页 » PHP教程 » php收集字节序技巧_收集编程之收集字节序详解

php收集字节序技巧_收集编程之收集字节序详解

访客 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

那么什么是字节序呢?有哪些字节序呢?进行网络编程的时候须要把稳哪些细节呢?

首先先理解下什么是字节序

php收集字节序技巧_收集编程之收集字节序详解

字节序,顾名思义字节的顺序,便是大于一个字节类型的数据在内存中的存放顺序。

php收集字节序技巧_收集编程之收集字节序详解
(图片来自网络侵删)

字节序常日分为两类:Big-Endian 和 Little-Endian。

引用标准的 Big-Endian 和 Little-Endian 的定义如下:

Little-Endian:便是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
Big-Endian:便是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

那么什么是网络字节序呢?

网络字节序:TCP/IP各层协议将字节序定义为 Big-Endian,因而Big-Endian字节序又称为网络字节序

比如C措辞的int值(32位),占用4个字节。
那么这4个字节在内存中是怎么排列的呢?网络传输的时候,哪个字节先传,哪个字节后传呢?

unsigned int ival = 0x12345678;

unsigned char szBuf[4];

来表示

在Big-Endian的打算机中是

szBuf[3] -> 0x78;szBuf[2] -> 0x56;szBuf[1] -> 0x34;szBuf[0] -> 0x12;

在Little-Endian的打算机中是

szBuf[3] -> 0x12;szBuf[2] -> 0x34;szBuf[1] -> 0x56;szBuf[0] -> 0x78;

网络传输的时候,按照szBuf[0],szBuf[1],szBuf[2],szBuf[3]的顺序传输。

那么吸收端如何知道这是一个0x12345678,还是0x78563412呢?

这个时候就须要有一个约定了,这便是网络字节序的来历,网络字节序被定义为Big-Endian字节序。

然后事情就大略了,不管本地打算机是什么类型的打算机,如何存储字节序。
只要涉及网络传输的,就统一将本机字节序转换为网络字节序。
发送和吸收都一样。
有了统一的中间转换字节序,这样两端的数值就对上号。

附上c措辞网络编程的网络字节顺序与本地字节顺序之间的转换函数:

htonl()--"Host to Network Long"ntohl()--"Network to Host Long"htons()--"Host to Network Short"ntohs()--"Network to Host Short"

标签:

相关文章

乌合大数据,新时代数据融合的先锋力量

随着互联网技术的飞速发展,大数据已经成为推动社会进步的重要力量。乌合大数据作为新时代数据融合的先锋力量,以其独特的优势,为各行各业...

PHP教程 2024-12-17 阅读0 评论0

乘机大数据,解码空中出行的新趋势

随着科技的飞速发展,大数据已经渗透到了各行各业。在航空领域,乘机大数据的运用为航空公司、机场、旅客等各方带来了诸多便利。本文将从乘...

PHP教程 2024-12-17 阅读0 评论0

乐护大数据,介绍医疗健康领域的未来趋势

随着互联网技术的飞速发展,大数据已经成为各行各业的重要驱动力。在医疗健康领域,大数据同样发挥着举足轻重的作用。乐护大数据作为我国医...

PHP教程 2024-12-17 阅读0 评论0