首页 > 其他分享 >网络字节序和主机字节序的转换函数实践

网络字节序和主机字节序的转换函数实践

时间:2022-10-07 22:01:05浏览次数:73  
标签:小端 存储 字节 主机 网络 endian 函数

1、什么是字节序


计算机在储存数据时有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)

1.大端字节序(big endian)

大端字节序(big endian)是将值的高位存储在较小的地址,值的低位存储在较大的地址

2.小端字节序(little endian)

小端字节序(little endian)是将值的低位存储在较小的地址,值的高位存储在较大的地址

image
image

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


顾名思义,网络字节序是数据在网上交换时的信息存储方式,而主机字节序是数据在本地进行存储的方式

1.网络字节序

数据在网上传输,如果存储方式不同,那么大家交流数据会比较麻烦,所以TCP/IP协议规定,网上传输采用大端字节序(big endian)统一数据传输规范

2.主机字节序

存储在本地计算机上的数据存储方式是由CPU决定的,不同的CPU会有不同的存储方式,比如x86系列CPU都是little-endian的字节序,

3、计算机处理字节序的方法


计算机在处理数据时不知道大端小端,只会按照自己顺序读取,所以,如果是大端字节序,那么顺序读取第一个就是高位字节,如果是小端字节序,顺序读取第一位就是低位字节

4、网络字节序和主机字节序的转换


两台计算机之间传输数据需要通过网络字节序传输,那么从A计算机到B计算机之间,需要有一个标准化的过程,

1.网络字节序转主机字节序

  uint32_t ntohl(uint32_t netlong);   //将一个无符号长整型数从网络字节序转换成主机字节序
  uint16_t ntohs(uint16_t netshort);  //将一个无符号短整型数从网络字节序转换成主机字节序

2.主机字节序转网络字节序

  uint32_t htonl(uint32_t hostlong);  //将一个无符号长整型数从主机字节序转换成网络字节序
  uint16_t htons(uint16_t hostshort); //将一个无符号短整型数从主机字节序转换成网络字节序
- n代表“network”---网络,h代表“host”---主机,l代表long的长度(32位),s代表short的长度(16位)
- 在使用小端字节序的系统中,也就是主机字节序和网络字节序不同,所以这些函数会把字节序进行转换
- 在使用大端字节序的系统中,也就是主机字节序和网络字节序相同,不需要转换,这些函数会定义成空宏

参考文章

网络字节序和主机字节序

网络字节序和主机字节序详解

标签:小端,存储,字节,主机,网络,endian,函数
From: https://www.cnblogs.com/zyc-666/p/16767268.html

相关文章

  • 常用的 函数式接口
    函数式接口:将注解@FunctionalInterface放在一个接口上,编译器会帮我们检查这个接口是否亿实业韩式接口 JDK提供的常见函数式接口:所在包:java.util.function ......
  • BufferedOutPutStream字节输出流
    字节输出流构造方法:BufferedOutPutStream(OutPutStreamout)BufferedOutPutStream(OutPutStreamout,intsize)参数:OutPutStreamout:字节输出流,可以传递OutPutS......
  • 基础06:聚合函数
    一、聚合函数介绍什么是聚合函数聚合函数作用于一组数据,并对一组数据返回一个值。聚合函数类型AVG();SUM();MAX();MIN();COUNT();1.1AVG和SUM函数可......
  • 基础05:单行函数
    一、函数的理解1.1什么是函数函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效......
  • 网络字节序与主机字节序的转换函数实践
    1#include<netinet/in.h>2unit16_thtons(uint16_thost16bitvalue);3uint32_thtonl(uint32_thost32bitvalue);//均返回网络字节序的值4unit16_tntohs(uint1......
  • 字节还行
    计算机本科应届生年薪30w40w真的很普遍吗必然不是普遍情况,金字塔腰部和顶端的竞争永远激烈真正优秀的人才在全局来看、永远不到5%高校层次、实验室就业质量、按比例退减不......
  • 网络字节序与主机字节序的相互转换
    1.网络字节序与主机字节序在Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰了解以下几个概念。字节序,顾名思义,指字节在......
  • 网络字节序与主机字节序的转换函数实践
    1、网络字节序:是TCP/IP中一种固定好的数据表示格式,它与具体的CPU,操作系统,传输方式无关,从而可以保证数据在不同主机之间传输时能够兼容。2、主机字节序:即大端(BigEndian)......
  • 函数和虚函数对struct结构体大小的影响
    编者:李国帅时间:20背景:在网络传输程序中,往往把数据封装到结构体中统一传输,这时候,结构体的大小就会很重要,不注意的话,容易造成数据的丢失或者溢出。在实际的使用中要注意分析V......
  • 从头开始学MySQL-------存储过程与存储函数(1)
     10.1.1 创建存储过程    存储过程就是一条或者多条SQL语句的集合,可以视为批文件。它可以定义批量插入的语句,也可以定义一个接收不同条件的SQL。    创......