【数据存储】大/小端存储与字节顺序转换函数详解

news2024/11/24 19:54:11

学习目的是使用,网络编程主机字节顺序与网络字节顺序转换这块就用到了这些概念及其函数!

【Linux网络编程入门】Day5_socket编程基础

文章目录:

  1. 大端存储与小端存储
    1.1 低地址与高地址
    1.2 数据的高位与低位
    1.3 大端存储
    1.3.1 定义
    1.3.2 小端存储举例

  2. 小端存储
    2.1. 定义
    2.2 小端存储举例

  3. Linux网络通信
    3.1 四个函数存在的意义
    3.2. htonl())函数
    3.3. htons()函数
    3.4. ntohs()函数
    3.5. ntohl()函数

大端存储与小端存储

大端:将数据的低位字节放到高地址空间,高位字节放到低地址空间。地址由小向大增加,而数据从高位往低位放;
小端:将数据的低位字节放到低地址处,高位字节放到高地址处。高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致;
低地址与高地址
高地址:值较大的地址  
低地址:值较小的地址
注意:计算机读数据永远是从低地址开始的!!!

在这里插入图片描述

数据的高位与低位
数据的高位:数据左边位置的数
数据的低位:数据右边位置的数
数据的高位和低位又称高字节和低字节

在这里插入图片描述

大端存储
1. 定义
将数据的低位字节放到高地址空间,高位字节放到低地址空间。地址由小向大增加,而数据从高位往低位放;
2.小端存储举例
存放二进制数:1011-0100-1111-0110-1000-1100-0001-0101
  • 存放的时是以一个存储单元为单位来存放
  • 读取从低地址读起!我们知道这是小端存储,所以在读出来的时候会从高位开始放

在这里插入图片描述
在这里插入图片描述

小端存储
1. 定义
将数据的低位字节放到低地址处,高位字节放到高地址处。高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致;
2.小端存储举例
  • 存放的时是以一个存储单元为单位来存放
  • 读取从低地址读起!我们知道这是小端存储,所以在读出来的时候会从低位开始放
存放二进制数:1011-0100-1111-0110-1000-1100-0001-0101

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Linux网络通信


参考链接:https://blog.csdn.net/m0_73825482/article/details/134315400

四个函数存在意义

为什么存在这个函数呢?或者存在这个函数的意义?(大端小端存储

先引入字节存放的两个概念一个是“大端顺序”,一个是“小端顺序”。俗称“小尾顺序”、“大尾顺序”。

简单的说就是对应数据的高字节存放在低地址,低字节存放在高地址上就是大端顺序;
对应数据的高字节存放在高地址,低字节存放在低地址上就是小端顺序。
比如 unsigned long hostlong = 0xa2b4c6d8;
大端顺序存放:
偏移地址       存放内容
0x00000000 0xa2
0x00000001 0xb4
0x00000002 0xc6
0x00000003 0xd8

小端顺序存放:
偏移地址      存放内容
0x00000000 0xd8
0x00000001 0xc6
0x00000002 0xb4
0x00000003 0xa2
同理推理16位数以及64位数。

一般地,在我的编译器里面设置的是小端顺序,这个可以根据自己的编译器看下设置,这里不深入说明。
但是网络传输数据采用的是大端顺序。
所以这才涉及到主机字节顺序和网络字节顺序,再说的详细一点,主机字节顺序可能是大端顺序或者小端顺序(这个要看编译器的设置,还有自己是用的C还是Java还是其他的语言,其各自都是不尽相同),但是网络字节顺序一定是大端顺序。
1. htonl()函数
原型:
	uint32_t htonl(uint32_t hostlong)
参数:
	hostlong:主机字节顺序表达的32位数
	htonl中的h–host主机地址,to–to,n–net网络,l–unsigned long无符号的长整型(32位的系统是4字节);
返回值:
	一个32位的网络字节顺序;
作用:
    将一个32位数从主机字节顺序转换成网络字节顺序。
2. htons()函数
原型:
	uint16_t htons(uint16_t hostlong)
参数:
	hostlong是主机字节顺序表达的16位数
	htons中的h–host主机地址,to–to,n–net网络,s–unsigned short无符号的短整型(32位的系统是2字节);
返回值:
	一个16位的网络字节顺序;
作用:
	将一个16位数从主机字节顺序转换成网络字节顺序,简单的说就是把一个16位数高低位呼唤。
3. ntohs()函数
原型:
	uint16_t ntohs(uint16_t netshort)
参数:
	netshort是网络字节顺序表达的16位数
	ntohs中的n–net网络,to–toh–host主机地址,s–unsigned short无符号的短整型(32位的系统是2字节);
返回值:
	一个16位的主机字节顺序;
作用:
	将一个16位数由网络字节顺序转换为主机字节顺序,简单的说就是把一个16位数高低位互换。
4. ntohl()函数
原型:
	uint32_t ntohs(uint32_t netlong)
参数:
	netlong是网络字节顺序表达的32位数
	ntohs中的n–net网络,to–toh–host主机地址,l–unsigned long无符号的长整型(32位的系统是4字节);
返回值:
	一个32位的主机字节顺序;
作用:
	将一个32位数由网络字节顺序转换为主机字节顺序。

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

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

相关文章

轻松打造一个可以切换AI平台的网站

亮色主题 暗色主题 停止按键 设置界面 浏览器缓存设置 Kimi 通义千问 ChatGPT 手机版 部分代码如下: # -*- coding: utf-8 -*- from flask import Flask, request, jsonify, render_template, Response import requests import json import os from gevent import p…

Go反射四讲---第二讲:反射与结构体,使用反射如何操纵结构体?

反射-结构体 这是我们反射四讲的第二讲,本次给大家讲解如何使用反射处理结构体。 使用反射如何输出结构体的字段名字和值,使用反射如何给结构体字段设置值。 为了确保反射输出所有的字段名字和值,关键在于一点只有 Kind Struct 的才有。 注意&#…

Neo4J下载安装

Windows 版本 1、 下载链接安装JDK 下载链接 https://download.oracle.com/java/22/latest/jdk-22_windows-x64_bin.msi 下载完毕后默认安装即可 2、 下载Neo4J 进入Neo4j Deployment Center - Graph Database & Analytics下载页面,选择社区版,…

CentOS全面停服,国产化提速,央国企信创即时通讯/协同门户如何选型?

01. CentOS停服带来安全新风险, 国产操作系统迎来新的发展机遇 2024年6月30日,CentOS 7版本全面停服,于2014年发布的开源类服务器操作系统——CentOS全系列版本生命周期画上了句号。国内大量基于CentOS开发和适配的服务器及平台&#xff0c…

笔记小结:《利用python进行数据分析》之使用pandas和seaborn绘图

matplotlib实际上是一种比较低级的工具。要绘制一张图表,你组装一些基本组件就行:数据展示(即图表类型:线型图、柱状图、盒形图、散布图、等值线图等)、图例、标题、刻度标签以及其他注解型信息。 在pandas中&#xf…

pyyaml:Python 中的 YAML 处理大师

文章目录 pyyaml:Python 中的 YAML 处理大师背景:为何选择 pyyaml?pyyaml 是什么?如何安装 pyyaml?五个简单的 pyyaml 库函数使用方法1. 加载 YAML 数据2. 转储 YAML 数据3. 从文件加载 YAML4. 将数据写入 YAML 文件5.…

Cockos Reaper:开启专业数字音频制作之旅

Cockos Reaper 是一款备受赞誉的专业数字音频制作软件,适用于 Mac 和 Windows 系统。它以其强大的功能和高度的灵活性,成为众多音乐人和音频制作人的首选工具。 在音乐创作方面,Reaper 提供了丰富的虚拟乐器和音频效果插件,让你能…

如何使用ssm实现ssm框架的购物网站+vue

TOC ssm113ssm框架的购物网站vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。…

AI 绘画神器 Midjourney 基础使用手册

一、前提条件 需要魔法: 新用户可免费创作 25 张图片,超过需要办会员版权问题:会员生成的图片版权归创作者所有 二、注册/链接 服务器 温馨提示:下方多图预警 1. 注册、创建服务器 ① 打开Midjourney官网,右下角…

机器学习入门指南:如何构建智能预测模型

【机器学习】:入门从零开始的指南 随着人工智能的快速发展,机器学习(Machine Learning)已经成为技术领域的热点话题。无论是推荐系统、语音识别、自动驾驶汽车,还是自然语言处理,机器学习的应用随处可见。…

minio文件存储

文章目录 参考安装与部署springboot整合miniopom.xmlapplication.ymlMinioPropertiesMinioConfigMinioApp测试基本功能bucket是否存在创建bucket修改bucket的访问权限查询所有的bucket删除指定的bucket上传文件到minio查看对象的描述信息获取文件的预签名访问地址后台获取minio…

第二课《动态规划》

1.1.1 线性dp 2.1.1 区间dp 3.1.1 背包dp 动态规划理论 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中, 可能会有很多可行解。没一个解都对应于一个值,我们希望找到具有最优值的解。胎动规划算法与分治法类似,其基本思想…

数据丢失不再怕!2024年高效硬盘恢复软件精选

硬盘数据丢失或文件损坏等问题,这不仅会影响我们的日常工作与生活,还可能造成无法挽回的损失。随着技术的发展,市场上涌现出了众多硬盘数据恢复软件。本文将为您介绍几款主流且高效的硬盘文件修复工具,希望能为您在数据遭遇不测时…

《深入浅出WPF》读书笔记.6binding系统(下)

《深入浅出WPF》读书笔记.6binding系统(下) 背景 主要讲数据校验和数据转换以及multibinding 代码 binding的数据校验 <Window x:Class"BindingSysDemo.ValidationRulesDemo"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmln…

innodb_buffer_pool_size在线缩小操作

一、背景 测试数据库内存32G&#xff0c;只有MySQL数据库&#xff0c;但是innodb_buffer_pool_size设置了24G&#xff0c;导致经常出现lack of memory问题、lack of swap问题。 因为使用了MySQL5.7.36版本&#xff0c;利用innodb_buffer_pool_size参数值可在线调整的新特性&…

这个TOP 100 AI应用榜单,包含了所有你需要的使用场景(一)

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

【源码+文档+调试讲解】劳务外包管理系统的设计与实现

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对劳务外包信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

微分方程(Blanchard Differential Equations 4th)中文版Section3.7

迹-行列式平面上平面系统分析 在前面的章节中,我们遇到了许多不同类型的线性微分方程系统。到目前为止,可能会觉得这些系统有很多不同的可能性,每种都有其独特的特征。为了将这些例子放在整体视角下进行回顾,创建一个表格是一个有用的方法。 总结我们到目前为止所做的工作…

基于SHAP进行特征选择和贡献度计算——可解释性机器学习

方法介绍 SHAP&#xff08;SHapley Additive exPlanations&#xff09;是一个 Python 包&#xff0c;旨在解释任何机器学习模型的输出。SHAP 的名称源自合作博弈论中的 Shapley 值&#xff0c;它构建了一个加性的解释模型&#xff0c;将所有特征视为“贡献者”。对于每个预测样…

深入探讨量子计算领域的最新进展及其对社会经济的影响

一、引言 在21世纪的科技浪潮中&#xff0c;量子计算作为一项颠覆性技术&#xff0c;正逐步从理论走向实践&#xff0c;成为各国竞相争夺的科技制高点。量子计算利用量子力学原理&#xff0c;实现了对传统计算模式的根本性变革&#xff0c;其强大的并行处理能力和指数级增长的…