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

article/2025/9/20 21:25:36

一、网络字节序和主机字节序

网络字节序主机字节序是计算机网络中常用的两种数据存储格式

主机字节序: 指的是在计算机内部存储数据时采用的字节排序方式。对于一个长为4个字节的整数,若采用大端字节序,则该整数在内存中的存储顺序是:以地址递增顺序依次存储其最高位到最低位的每个字节;若采用小端字节序,则该整数的字节则按照倒序的方式存储于内存中。

例如,在大端字节序中,数字127的存储方式如下:

3cef8744f65543ca8a7205bf8fd4314b.png

 网络字节序: 指的是一种标准的字节序,规定了数据在网络数据传输中采用的字节序,即大端字节序,也被称为网络序(Network Byte Order)。理由是因为不同的机器可能采用不同的主机字节序,而网络通信必须使用统一的字节序,这样才能保证不同系统之间的通信正常进行。

二、htonl()和ntohl

在C/C++语言中,可以使用函数htonl()ntohl()等将主机字节序转为网络字节序(大端字节序),并将网络字节序转换为主机字节序。其中,htonl()表示将32位整数从主机字节序转换为网络字节序,ntohl()则表示将32位整数从网络字节序转换为主机字节序,其他还有htons()ntohs()等类似的函数用于16位整型。

下面是一个简单的示例,演示了如何使用 htonl()ntohl() 函数将主机字节序和网络字节序相互转换

#include <stdio.h>
#include <arpa/inet.h> // 包含 htons() 和 ntohl() 函数的头文件

int main()
{
    unsigned int host_num = 0x12345678; // 本机使用的数据,被视为主机字节序
    unsigned int net_num = htonl(host_num); // 转换为网络字节序

    printf("host num: 0x%x\n", host_num);
    printf("net num: 0x%x\n", net_num);

    // 将网络字节序恢复为主机字节序
    unsigned int restored_num = ntohl(net_num);

    printf("restored num: 0x%x\n", restored_num);

    return 0;
}

运行结果如下所示:

host num: 0x12345678
net num: 0x78563412
restored num: 0x12345678

可以看到,在本机上调用 htonl() 函数将主机字节序转换为网络字节序后,输出的结果的顺序与我们期望的顺序完全相反。但在另一台计算机上接收到此数据时,这个字节序列就按照我们期望的大端字节序进行解释,最后恢复成原来的主机字节序。

 

 


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

相关文章

字节序

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;然后就可以手动删除…

Android 上传代码到gitee并发布到Jitpack生成远程库

# 一创建项目 查看toollibrary主要配置 这里附上关键代码 plugins {id com.android.libraryid org.jetbrains.kotlin.androidid maven-publish } task generateSourcesJar(type: Jar) {from android.sourceSets.main.java.srcDirsclassifier sources } afterEvaluate {publish…

jitpack 介绍

2019独角兽企业重金招聘Python工程师标准>>> jitpack 一个有意思的工具&#xff0c; 可以从github、码云根据commitId、tag 生成maven依赖&#xff0c;减少代码下载、打包等步骤。工具地址 https://jitpack.io/ 转载于:https://my.oschina.net/u/2000646/blog/2966…

你会在 JitPack 上创建依赖库吗?

为什么写 看见标题有人可能会轻蔑一笑&#xff0c;多简单个事&#xff1f;还至于专门写一篇文章吗&#xff1f; 我之前也以为挺简单的&#xff0c;因为之前自己也上传过&#xff0c;但是前几天的经历告诉我没有那么简单&#xff0c;特别是现在安卓 Gradle 升级到 7.0 之后。。…