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

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

时间:2022-10-08 12:55:56浏览次数:43  
标签:存储 转换 字节 主机 网络 内存 函数

字节序基础概念

字节序,顾名思义,指字节在内存中存储的顺序。比如一个int32_t类型的数值占用4个字节,这4个字节在内存中的排列顺序就是字节序。字节序有两种:
(1)小端字节序(Little endinan),数值低位存储在内存的低地址,高位存储在内存的高地址;
(2)大端字节序(Big endian),数值高位存储在内存的低地址,低位存储在内存的高地址。

如下所示:

image

为什么要有大端字节序和小端字节序

计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的,所以计算机的内部处理大都是小端字节序。

但是,人类还是习惯大端字节序。所以,除了计算机的内部处理,其他场合几乎都是大端字节序,比如网络传输和文件储存等。

网络字节序与主机字节序

前面说的字节序其实是指主机字节序,即主机字节序既包括小端字节序,又包括大端字节序。它与具体的CPU类型、操作系统类型等有关。

网络字节序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而保证数据在不同主机之间传输时能够被正确解释。

网络字节序采用大端字节序。

判断本机的主机字节序

 

 

网络字节序,是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。

网络字节序与主机字节序的相互转换

常用系统调用

Linux socket网络编程中,经常会使用下面四个C标准库函数进行字节序间的转换。

 

64位数值的转换

现在如果需要对64位类型数据进行主机字节序与网络字节序的转换,没有现成系统API可用,可以通过下面两种方法进行转换:

使用移位:

 

 

 

使用联合体union

根据联合体的特性:联合中所有成员引用的是内存中相同的位置,其长度为最长成员的长度。

 

标签:存储,转换,字节,主机,网络,内存,函数
From: https://www.cnblogs.com/leastl/p/16768600.html

相关文章

  • 指针与函数
    1.通过指针变量访问整型变量#include<stdio.h>intmain(){inta,b;int*p1,*p2;scanf("a=%d,b=%d",&a,&b);p1=&a;p2=&b;printf("*p1=......
  • 攻防世界Web_php_unserialize(__wakeup函数绕过)
    <?phpclassDemo{private$file='index.php';publicfunction__construct($file){$this->file=$file;}function__destruct(){......
  • js高级ES6class构造函数与super继承
    <!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metaname="viewport"content="width=......
  • JavaScript高级复习——构造函数和原型
    构造函数JavaScript的构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的this上添加。通过这两种方式添加的成员,就分别称之为静态成员和实例成员......
  • [转]为什么VS提示SurfFeatureDetector不是cv的成员函数
    surf和sift算法都是在头文件#include<opencv2/features2d/features2d.hpp>中,但在新的opencv版本出来后,如果仍然使用这个头文件就会出现编译错误如下:'SurfFeatureDetector......
  • 网络字节序和主机字节序的转换函数实践
    1、什么是字节序计算机在储存数据时有两种储存数据的方式:大端字节序(bigendian)和小端字节序(littleendian)1.大端字节序(bigendian)大端字节序(bigendian)是将值的高位......
  • 常用的 函数式接口
    函数式接口:将注解@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什么是函数函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效......