字节序的详细讲解

article/2025/9/20 20:57:51

字节序

  • 1、字节序的特点
  • 2、字节序转换函数
    • 2.1、htonl函数 发 将主机字节序的IP地址 转换成网络字节序的IP地址
    • 2.2、ntohl函数 收 将网络字节序的IP地址
    • 3.3、htons函数 发 将主机字节序的端口 转换成 网络字节序的端口
    • 3.4、ntohs函数 收 将网络字节序的端口 转换成 主机字节序的端口
    • 总结:
  • 3、地址转换
    • 3.1、inet_pton函数 发 将点分十进制数串 转换成 32位网络字节序地址(大端格式)
      • 案例:
    • 3.2、inet_ntop函数 收 将32位网络字节序IP 转换成 点分十进制数串
      • 案例:

1、字节序的特点

在这里插入图片描述
1、网络协议指定了通讯字节序—大端
2、只有在多字节数据作为整体处理时才需要考虑字节序
3、运行在同一台计算机上的进程相互通信时,一般不用考虑字节序
4、异构计算机之间通讯,需要转换自己的字节序为网络字节序

2、字节序转换函数

2.1、htonl函数 发 将主机字节序的IP地址 转换成网络字节序的IP地址

uint32_t htonl(uint32_t hostint32);
功能:将32位主机字节序数据转换成网络字节序数据
参数:hostint32:待转换的32位主机字节序数据
返回值:成功:返回网络字节序的值
头文件:#include <arpa/inet.h>

2.2、ntohl函数 收 将网络字节序的IP地址

转换成主机字节序的IP地址

uint32_t ntohl(uint32_t netint32);
功能:将32位网络字节序数据转换成主机字节序数据
参数:uint32_t: unsigned intnetint32:待转换的32位网络字节序数据
返回值:成功:返回主机字节序的值
头文件:#include <arpa/inet.h>

3.3、htons函数 发 将主机字节序的端口 转换成 网络字节序的端口

uint16_t htons(uint16_t hostint16);
功能:将16位主机字节序数据转换成网络字节序数据
参数:uint16_t:unsigned short inthostint16:待转换的16位主机字节序数据
返回值:成功:返回网络字节序的值
头文件:#include <arpa/inet.h>

3.4、ntohs函数 收 将网络字节序的端口 转换成 主机字节序的端口

uint16_t ntohs(uint16_t netint16);
功能:将16位网络字节序数据转换成主机字节序数据
参数:uint16_t: unsigned short intnetint16:待转换的16位网络字节序数据
返回值:成功:返回主机字节序的值
头文件:#include <arpa/inet.h>

总结:

1、htons htonl ntohs ntohl 如果主机 和网络 字节序相同 前面4个函数不会颠倒数据
2、htons htonl ntohs ntohl 如果主机 和网络 字节序 不相同 前面4个函数会颠倒数据

在这里插入图片描述
大小端 不是人为决定的

3、地址转换

IP地址:“192.168.0.111” 点分十进制数串(字符串)
计算机的中的IP地址32位:4字节

3.1、inet_pton函数 发 将点分十进制数串 转换成 32位网络字节序地址(大端格式)

int inet_pton(int family,const char *strptr, void *addrptr);
功能:将点分十进制数串转换成32位无符号整数
参数:family 协议族 AF_INETstrptr 点分十进制数串addrptr  32位无符号整数的地址
返回值:成功返回1 、 失败返回其它
头文件:#include <arpa/inet.h>

案例:

#include<stdio.h>
#include<arpa/inet.h>
int main()
{//点分十进制数串char *str_ip="192.168.0.111";//32位无符号整形数据unsigned int num_ip=0;//AF_INETIPv4  AF_INET6 IPv6inet_pton(AF_INET,str_ip, &num_ip);printf("str_ip=%s\n", str_ip);printf("num_ip=%u\n", num_ip);//1862314176 //细致分析 num_ip的4字节分布unsigned char *p = (unsigned char *)&num_ip;printf("%u %u %u %u\n", *p, *(p+1),*(p+2), *(p+3));//192 168 0 111return 0;
}

运行结果:
在这里插入图片描述
在这里插入图片描述

3.2、inet_ntop函数 收 将32位网络字节序IP 转换成 点分十进制数串

整型数据转字符串格式ip地址
const char *inet_ntop(int family, const void *addrptr,
char *strptr, size_t len);
功能:将32位无符号整数转换成点分十进制数串
参数:family    协议族 AF_INETaddrptr    32位无符号整数strptr    点分十进制数串len        strptr缓存区长度
len的宏定义#define INET_ADDRSTRLEN   16  //for ipv4#define INET6_ADDRSTRLEN  46  //for ipv6
返回值:成功:则返回字符串的首地址失败:返回NULL
头文件:#include <arpa/inet.h>

案例:

在这里插入图片描述


http://chatgpt.dhexx.cn/article/RZBtgP0C.shtml

相关文章

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

以下内容参考了 http://www.ruanyifeng.com/blog/2016/11/byte-order.html https://blog.csdn.net/yishengzhiai005/article/details/39672529 1. 计算机硬件有两种储存数据的方式&#xff1a;大端字节序&#xff08;big endian&#xff09;和小端字节序&#xff08;little …

什么是字节序?

字节序 字节序&#xff0c;顾名思义&#xff0c;就是字节组织的顺序。我们可以将其根据其存储时从低位开始还是从高位开始分为两种&#xff0c;具体如下&#xff1a; 类型简写本质大端BE(big endian)将高序字节存储在起始地址小端LE(little endian)将低序字节存储在起始地址 …

网络字节序和主机字节序详解(附代码)

一、网络字节序和主机字节序 网络字节序和主机字节序是计算机网络中常用的两种数据存储格式。 主机字节序&#xff1a; 指的是在计算机内部存储数据时采用的字节排序方式。对于一个长为4个字节的整数&#xff0c;若采用大端字节序&#xff0c;则该整数在内存中的存储顺序是&a…

字节序

1.字节序 字节序&#xff0c;又称端序或尾序&#xff0c;指的是多字节数据在内存中的存放顺序。例如一个int型变量x占用4个字节&#xff0c;假设它的起始地址&x为0x10&#xff0c;那么x将会被存储在 0x10、0x11、0x12和0x13位置上。 在用C写的客户端和Java写的服务端的通…

字节序详细解读

概念来了&#xff01;&#xff01;&#xff01; 字节序&#xff08;Byte Order&#xff09;是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。 在计算机中是以字节为单位&#xff0c;每个地址对应一个字节&#xff0c;一个字节8bit。在C中&#xff0c;除了8bi…

JitPack的简单使用

JitPack的简单使用 由于工作需要,我要搭建多个项目,但是每个项目的基类,工具包,自定义的view,都是一样的,需要将这些代码复制到好几个项目里,所以萌生了一个想法,将这些基本不会改变的代码,做成一个依赖,一行代码引入项目 打开你的项目Git地址,创建发行版本 打开jitpack官网…

Gitee项目发布到JitPack

Gitee项目发布到JitPack 发布前的准备将Gitee项目发布到jitPack使用自己发布的库 发布前的准备 1.搜先注册一个Gitee账号 2.新建一个本地的android项目&#xff0c;并上传到Gitee。 (1) 根目录下build.gradle配置 dependencies {...classpath "com.android.tools.build:g…

【jitpack】android implementation 远程仓库

目录 前言接入步骤使用说明问题后记结束语 前言 做android的小伙伴都知道&#xff0c;android studio 在使用其他三方项目的时候使用gradle来管理版本,如直接使用如下就能快速把 appcopmt-v7 引入到项目中使用 implementation com.android.support:appcompat-v7:28.0.0 其实…

【JitPack】发布一个你自己的 Android 依赖库

文章目录 背景步骤新建 Android Library 项目配置 Gradle提交项目到 githubPull Request 到主分支创建 tag 并发布 release 版本JitPack 生成项目的依赖库第三方应用集成使用依赖库 JitPack 生成依赖库的 pom.xml 文件地址参考链接 背景 最近突然想开发个 Android Library&…

Android私有库gitee发布到JitPack后,编译通过但依赖不到。

JitPack编译通过后点击查看log只有这个&#xff1a; Subscription is not active right now Requested subscription: gitee.com/huile_1_0. Your subscriptions are listed in https://jitpack.io/w/user Please contact Support or repository admins if you need assistanc…

JitPack让第三方依赖更简单(第一种方法)

前面我们讲了如何将我们开发常用的工具发布到jcenter&#xff0c;然后进行依赖&#xff0c;这样有利于提高开发的效率&#xff0c;但是&#xff0c;又出现了一种新的发布方式&#xff0c;虽然现在使用的人还没有jcenter多&#xff0c;但是个人感觉未来使用的人会超过jcenter&am…

Android自定义library上传到JitPack

一、背景 最近公司不是太忙&#xff0c;闲的无聊&#xff0c;准备整理下属于自己的library库&#xff0c;想把自己平时用到的库保存起来到JitPack上&#xff0c;用的时候直接依赖添加。下面是我们把library发布到JitPack上去的记录过程。 二、项目配置 1.版本不同配置方法有些不…

maven { url “https://jitpack.io“ }

maven { url "https://jitpack.io" } 不能写在项目的build.gradle里面&#xff0c;要写在项目的setting.gradle

AndroidStudio之https://jitpack.io

前言 很多小伙伴自己写了一个库,打算开源出来,但是直接给别人发jar包或者aar包,别人使用都很不方便,而且版本更新也不方便,所以很多小伙伴把开源库放到了远程仓库里(如maven或jcenter),但是麻烦就麻烦在需要打包导出等。 而今天我要推荐一个超级方便的远程仓库:https://jitpa…

Android 发布代码到github 并且部署到 JitPack maven 仓库详细步骤

废话不多说&#xff0c;直接上步骤干货 Step1 在项目根目录的build.gradle 文件中加入 buildscript {repositories {maven { url https://jitpack.io }}dependencies {classpath com.github.dcendents:android-maven-gradle-plugin:2.1} }allprojects {repositories {maven {…

JitPack让第三方依赖更简单(第二种方法)

文章目录 前言步骤使用结语 每日一句正能量 如果青春是醺人欲醉的海风&#xff0c;那么自信就是这和风前行的路标&#xff0c;如果青春是巍峨入云的高耸&#xff0c;那么拼搏就是这山脉层层拔高的动力&#xff1b;如果青春是高歌奋进的谱曲&#xff0c;那么坚强就是这旋律奏响的…

发布开源库的踩坑经历:jitpack.io

前言 很多小伙伴自己写了一个库,打算开源出来,但是直接给别人发jar包或者aar包,别人使用都很不方便,而且版本更新也不方便,所以很多小伙伴把开源库放到了远程仓库里(如maven或jcenter),但是麻烦就麻烦在需要打包导出等。 而今天我要推荐一个超级方便的远程仓库:JitPack | Pub…

maven { url ‘https://www.jitpack.io‘ }在新版Android Studio中的位置

Android Studio升级到Arctic Fox后&#xff0c;一些配置项的位置都做了改变。 github上的很多库通过JitPack.io发布的&#xff0c;引用这些库时&#xff0c;除了在模块的build.gradle文件中加入依赖&#xff0c;还要在项目的build.gradle文件中加入maven { url ‘https://www.j…

真香警告~JitPack 开源库集成平台

文章目录 前言简介使用场景:一、准备工作1.1 生成私人令牌1.2 在JitPack中配置 Gitee 访问权限 二、准备Gitee 码云项目2.1 将本地的开发项目上传到 Gitee仓库2.2 为源码仓库创建 发行&#xff08;Release&#xff09;版本 三、开源库集成JitPack3.1 进入 JitPack&#xff0c;使…

基于新版本Gradle上传jitpack开源项目

因为新版本的gradle编译开源库的方法已经变了&#xff0c;所以这边记录下 1.第一步创建一个空项目 2.因为这样会创建出来一个app项目&#xff0c;我们上传git是不需要这个的&#xff0c;所以我们在 项目中setting.gradle目录下注释掉 app模块&#xff0c;然后就可以手动删除…