| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 大端与小端概念、多字节之间与单字节多部分的大小端转换详解 -> 正文阅读 |
|
[系统运维]大端与小端概念、多字节之间与单字节多部分的大小端转换详解 |
大端与小端概念、多字节之间与单字节多部分的大小端转换详解前言本文主要介绍三个内容:
? ? 定义TCP/IP协议结构体的时候,常常搞不清楚一字节分成多个部分时,大小端是如何转换的,今天特意写下来,以免过几天又搞不清楚了。 ? ? 字节是计算机的基本单位,8bit=1byte,八位一字节,如果存储一个数,大于一个字节,由于计算机内存排布的不同,就要区分字节顺序:大端-Big Endian(High-byte first) 和 小端-Litter Endian(Low-byte first) ??本专栏知识点是通过零声教育的线上课学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接 C/C++后台高级服务器课程介绍 详细查看课程的服务。 高字节、低字节一个int类型的整数:123456789
高地址、低地址? ? 在内存中,多字节对象都是被存储为连续的字节序列。例如在C语言中,一个类型为int的变量n,如果其存储的首个字节的地址为0x1000,那么剩余3个字节的地址将存储在0x1001~0x1003。总之,不管具体字节顺序是以什么方式排列,内存地址的分配一般是从小到大的增长。我们常把0x1000称为低地址端,把0x1003称为高地址端。 大端、小端
(123456789)10 = (07 5B CD 15)16 ,这个int整形4字节该如何存储呢
网络字节序和主机字节序? ? 网络字节序(Network Order): ? ? 主机字节序(Host Order):整数在内存中保存的顺序,它遵循小端(Little Endian)规则(不一定,要看主机的CPU架构,不过大多数都是小端)。所以当两台主机之间要通过TCP/IP协议进行通信的时候就需要调用相应的函数进行主机序列(Little Endian)和网络序(Big Endian)的转换。 大小端转换用在什么地方? ?从上面我们已经知道了,TCP/IP各层协议 一般都是大端 , 而我们常用的计算机,一般都是小端。 ? ?所以如果我们要发送协议的时候,是要发送大端的;当我们接收到大端的协议,想要解析出来使用的时候,就要转成小端。 ? ?再往小的看,我们转换,转换的是整数(short ,int ,uint等等),因为只有整数才会有多个字节,对于单字节的char来说,是不需要转换的(特殊情况见下)。 ? ?如果是做跨平台开发时,双方需要协商好字节序,然后根据程序运行的环境,确定是否需要字节序转换。例如约定的通讯字节序为大端,默认的windows采用的小端,那收到数据后就需要做转换操作。 特殊情况:关注每个字节具体数值,单字节多部分的大小端转换? ?关注某个字节的具体 bit 的时候,是需要考虑大小端的。我们上面所说的,都是多字节的情况,对于int来说,4字节,我们只关注字节与字节之间的顺序;而对于一个字节,并且我们把这8bit,分成多个部分的情况的时候,我们需要考虑 bit 与 bit 之间的顺序,是需要考虑大小端的。 websocket协议? ?举个例子,在websocket协议介绍与基于reactor模型的websocket服务器实现,里面,我们就根据websocket的协议,定义了结构体。
ip协议? ?在ip协议里面,我们观察到第一个字节中,version4个bit,hdrlen4个bit。但是这个大端,如果要转换成小端,就逆序即可。
多字节之间 常用大小端转换api
IP地址转换函数: ? ?p->表示点分十进制的字符串形式
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 11:43:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |