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

2024-08-25 10:52

本文主要是介绍【数据存储】大/小端存储与字节顺序转换函数详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

【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.chinasem.cn/article/1105363

相关文章

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三