Linux程序设计之字节序转换

news2024/11/24 8:26:48

1.在网络通信中,数据的存储方式十分重要,因为它影响到数据的准确性。如今,电脑和网络上数据的存储方式有两种:大端模式和小端模式。大端模式:数据的高位存储在内存的低位,数据的低位存储在内存的高位。小端模式:数据的高位存储在内存的高位,数据的低位存储在内存的低位。如果数据的存储是大端模式,二读取时使用的是小端模式,那么读取出来的数据和原始数据是不一致的。综上所述,数据的存储方式直接影响到读取出数据的准确性。为了,不在存储方式上影响数据的准确性,Linux和Windows提供了一些字节序的转换函数,方便将数据转为主机或者网络上对应的存储方式。

2.代码:

/*实现主机的字节序和网络字节序的相互转换,
通常,网络中的字节序为大端模式,主机的字节序因主机而异*/
#include <stdio.h>
#include <arpa/inet.h>

int main()
{
    //1.htons 转换端口
    unsigned short a = 0x0102;  //两个字节
    printf("a : %x\n",a);
    unsigned short b = htons(a);    //函数调用,将主机字节序转换为网络字节序
    printf("b : %x\n",b);

    printf("********************************\n");

    //2.htonl 转换IP
    char buf[4] = {192,168,1,100};
    int num = *(int *)buf;
    int sum = htonl(num);
    unsigned char *p = (char *)&sum;
    printf("%d %d %d %d \n",*p,*(p+1),*(p+2),*(p+3));

    printf("********************************\n");

    //3.ntohs
    unsigned short a1 = 0x0304;  //两个字节
    printf("a1 : %x\n ",a1);
    unsigned short b1 = ntohs(a1);
    printf("b1 : %x\n",b1);

    printf("********************************\n");

    //4.ntoh
    unsigned char buf1[4] = {1,1,168,192};
    int num1 = *(int *)buf1;    //int * 是四个字节,(int *)buf1会取到buf1中的四个数(char只占一个字节),*(int *)buf1是取到转换之后的地址
    int sum1 = ntohl(num1); //函数调用,将网络字节序转为主机字节序
    unsigned char *p1 = (unsigned char *)&sum1;
    printf("%d %d %d %d \n",*p1,*(p1+1),*(p1+2),*(p1+3));

    return 0;
}

4.运行结果:

 5.总结:字节序的转换,在网络通信中是十分重要的。通过Linux和Windows提高的字节序转换函数,方便系统将字节序转为需要的存储模式(转为和主机或者网络上数据的存储模式一致)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/472542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【keil5开发ARM工程时使用STLink调试的技巧分享】

ARM工程开发小技巧系列文章 St link V2驱动安装方法 文章目录 ARM工程开发小技巧系列文章前言一、准备工作1. 硬件连接2. 安装stlink的驱动3. Keil 5配置 二、调试示例1.进入调试状态2. 调试演示2.1 复位&#xff0c;使程序复位到初始位置2.2 单步调试2.3 逐步调试2.4 跳出调…

Quartus中的逻辑锁定与增量编译

逻辑锁定功能可以将FPGA中的代码模块在固定区域实现&#xff0c;优化时序性能&#xff0c;提升设计可靠性。增量编译功能&#xff0c;可以使设计更快速时序收敛&#xff0c;加快编译速度。 LogicLock 使用Chip Planner创建逻辑锁定区域 打开Chip Planner&#xff0c;点击Vie…

Kubernetes Controller原理讲解

Controller原理 在 K8s 中&#xff0c;用户通过声明式 API 定义资源的“预期状态”&#xff0c;Controller 则负责监视资源的实际状态&#xff0c;当资源的实际状态和“预期状态”不一致时&#xff0c;Controller 则对系统进行必要的更改&#xff0c;以确保两者一致&#xff0…

人群计数数据集汇总和详细介绍,全网最全,crowd counting datasets

Crowd Counting数据集汇总 视频监控video surveillance https://github.com/gjy3035/Awesome-Crowd-Counting/blob/master/src/Datasets.md进展 | 密集人群分布检测与计数 :https://www.sohu.com/a/338406719_823210 Free-view 2022_Pedestrian Attribute Recognition htt…

vue+element Ui 树型组件tree懒加载+搜索框远程请求数据为平铺类型

本人之前一直是耕耘后台研发&#xff0c;最近接了个小需求需要接触到vue&#xff0c;记录一下我遇到的一些前端解决时间长的问题 需求&#xff1a; 1&#xff1a;每次动态请求接口获取下一节点数据 2&#xff1a;接口返回的数据是list&#xff0c;不带子节点&#xff0c;用pid来…

Scala中使用Typesafe Config 库

Typesafe Config 库 在 Scala 中加载配置文件有很多种方法&#xff0c;其中一种常用的方法是使用 Typesafe Config 库。该库提供了一种简单易用的方式来读取和解析配置文件。 以下是在启动 main 方法后加载配置文件的示例代码&#xff1a; 引入 Typesafe Config 库 import c…

【MySQL】函数

一、概述 MySQL中提供了大量函数来简化用户对数据库的操作&#xff0c;比如字符串的处理、日期的运算、数值的运算等等。使用函数可以大大提高SELECT语句操作数据库的能力&#xff0c;同时也给数据的转换和处理提供了方便。 &#xff08;在sql中使用函数&#xff09;函数只是对…

shadowsocks服务端和客户端搭建

shadowsocks服务端和客户端搭建 一、服务端搭建 买个境外云服务器&#xff0c;搭建shadowsocks服务端。 需要python3环境。 1.下载shadowsocks服务端python包&#xff0c;并启动。下载地址 # 1.下载 [rootiZrj982e4r5hkd053zsnmqZ ~]# wget https://pypi.python.org/packa…

2023隐私计算与人工智能峰会成功举办!数据宝演讲实录(上篇)分享

2023年4月8日&#xff0c;2023隐私计算与人工智能峰会在深圳举办&#xff0c;大会由华东江苏大数据交易中心和热点资讯联合主办&#xff0c;会上&#xff0c;数据宝董事詹臻女士做开幕式致辞。 数据宝与开放群岛&#xff08;Open Islands&#xff09;进行战略签约&#xff0c;…

LoRA: 大语言模型个性化的最佳实践

出品人&#xff1a; Towhee 技术团队 大型语言模型&#xff08;LLM&#xff09;在今年获得了极大的关注。在以往&#xff0c;预训练微调&#xff08;finetuning&#xff09;成为了让模型适配于特定数据的最佳范式。然而随着大型模型的出现&#xff0c;这种完全微调&#xff08;…

【运动规划算法项目实战】如何实现机器人多目标点导航

文章目录 前言一、 什么是actionlib?二、实现流程三、总结前言 在ROS机器人应用中,实现机器人多目标点导航是非常常见的需求。本文将介绍如何使用ROS和actionlib来实现机器人的多目标点导航,目标点信息将被记录在YAML文件中。 我们可以通过使用MoveBaseAction来实现机器人…

高并发场景下JVM调优实践

一、背景 2021年2月&#xff0c;收到反馈&#xff0c;视频APP某核心接口高峰期响应慢&#xff0c;影响用户体验。 通过监控发现&#xff0c;接口响应慢主要是P99耗时高引起的&#xff0c;怀疑与该服务的GC有关&#xff0c;该服务典型的一个实例GC表现如下图&#xff1a; 可以…

【WinForm】定时器的使用方法除了定时还有延迟执行可用

在使用VS开发工具创建的WinForm项目中&#xff0c;有一个定时器组件&#xff0c;拖出来放上&#xff0c;它只是一个定时处理的作用&#xff0c;不会显示在窗体中。 开发中如果需要定时处理&#xff0c;就使用Timer组件即可&#xff0c; 在它的属性事件一栏里&#xff0c;有一…

offer选择:创业公司 VS 大厂外包

面试拿到两个offer&#xff0c;一个是规模只有几十人的初创小公司&#xff0c;另一个是大厂外包岗位。都是功能测试&#xff0c;两者薪水待遇也差不多&#xff0c;该如何选择?更有利于之后的职业发展...... 这是一个比较典型的问题&#xff0c;对于要转行的同学或者是刚入行没…

【Call for papers】2023年CCF人工智能会议信息汇总(持续更新)

本博文是根据2022年CCF会议推荐的人工智能领域相关会议目录撰写。 注&#xff1a; 由于一些会议的投稿时间还没公开&#xff0c;因此根据往年投稿时间在表格中使用 ~ 符号表示大概的投稿时间&#xff08;一旦会议日期更新&#xff0c;我们也将同步更新博文。若更新不及时请小伙…

C++常用23种设计模式总结(一)------单例模式

什么是单例模式 单例模式是一种设计模式&#xff0c;它保证一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。这个模式通常用于控制资源的访问&#xff0c;例如数据库连接、线程池等。单例模式通过限制实例化操作并提供访问方法&#xff0c;确保在整个应用程序…

【Unity3D小功能】Unity3D中实现模型的旋转、缩放效果(控制摄像机)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 其实之前已经写了关于如何控制模型的旋转、移动、缩放效果&…

Android开发:使用sqlite数据库实现记单词APP

一、功能与要求 实现功能&#xff1a;设计与开发记单词系统的四个界面&#xff0c;分别是用户登录、用户注册、单词操作以及忘记密码。 指标要求&#xff1a;通过用户登录、用户注册、单词操作、忘记密码掌握界面设计的基础&#xff0c;其中包括界面布局、常用控件、事件处理等…

NPN三极管放大原理

NPN三极管放大 这是华为的芯片,还有其他人的芯片 无论这些芯片再复杂,它们都是由这种材料制成的 ​ 硅晶体 我们把他放大,单个硅原子最外层带有四个电子, 在纯硅当中,这些电子会两两形成共价键,此时周围形成非常稳定的八电子结构 我们接上电池, 电池无法吸引其中的电子离开,也…

不止大模型,亚马逊云科技布局AIGC底座能力

“大模型只是客户需求的其中一个部分&#xff0c;但远远不是所有&#xff0c;客户还需要更广泛的基础能力。亚马逊云科技推出自研芯片、生成式AI服务Bedrock以及大模型Titan&#xff0c;都在致力于推动AIGC技术的普惠化&#xff0c;够降AIGC的技术门槛和资金门槛&#xff0c;让…