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

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

时间:2022-10-06 21:00:24浏览次数:46  
标签:转换 字节 主机 函数 网络 network

1、网络字节序:是TCP/IP中一种固定好的数据表示格式,它与具体的CPU,操作系统,传输方式无关,从而可以保证数据在不同主机之间传输时能够兼容。

2、主机字节序:即大端(Big Endian)与小端(Little Endian)模式;由CPU和硬件的设置方式相关。

3、为了进行转换 bsd socket提供了转换的函数 有下面四个

(BSD Socket 是UNIX系统中通用的网络接口,它不仅支持各种不同的网络类型,而且也是一种内部进程之间的通信机制)

 

①htons 把unsigned short类型从主机序转换到网络序(host to network short)
②htonl 把unsigned long类型从主机序转换到网络序(host to network long)


③ntohs 把unsigned short类型从网络序转换到主机序(network to host short)
④ntohl 把unsigned long类型从网络序转换到主机序(network to host long)


注意1:在使用Little Endian的系统中, 这些函数会对字节序进行转换 ,将字节序转换为Big Endian
注意2:在使用Big Endian类型的系统中,这些函数会定义成空宏

h代表host,n代表network,s代表short,l代表long。如果长整型占用64位,htonl和ntohl操作的仍然是32位的值。

 

源自berkeley的字节操纵函数:

地址转换函数:

inet_aton将strptr所指c字符串转换成一个32位的网络字节序二进制值,并通过addrptr指针来存储。成功返回1,否则返回0.

inet_ntoa将一个32位的网络字节序二进制IPV4地址转换成相应的点分十进制数串。由于返回值所指向的字符串驻留在静态内存中,所以该函数是不可重入的。

这两个函数的family参数可以是AF_INET、AF_INET6。如果以不支持的地址族作为这个参数,返回一个错误,erron置为EAFNOSUPPORT。

inet_pton尝试转换strptr所指字符串,并将二进制结果存放在addrptr中,成功返回1,失败返回0.

inet_ntop进行相反的转换,从数值格式(addrptr)转换到表达格式(strptr)。len参数是目标存储单元的大小,以免溢出其调用者的缓冲区。调用陈宫时strptr就是这个函数的返回值

一般有如下定义:

 

标签:转换,字节,主机,函数,网络,network
From: https://www.cnblogs.com/dongruan/p/16758476.html

相关文章

  • 1.9 高级语法_函数
    #函数中已经输出结果,调用函数即可deffun(x):#函数体print(x/10)fun(10)fun(20)#函数中未输出结果,调用函数,再输出结果defcalc(a,b):returna+b......
  • 从 HelloWorld 看 Java 字节码文件结构
    很多时候,我们都是从代码层面去学习如何编程,却很少去看看一个个Java代码背后到底是什么。今天就让我们从一个最简单的HelloWorld开始看一看Java的类文件结构。在开始......
  • 【C语言】初始函数
    ......
  • ES6新特征高阶函数
    <!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metaname="viewport"content="......
  • 详解 printf() 函数
    声明(叠甲):鄙人水平有限,本文章仅供参考。1.引子#include<stdio.h>intmain(){printf("helloworld\n");return0;}上面这一段代码大家应该都十分的......
  • sorted函数中的key
    sorted函数有三个参数:iterable、key、reverse。其中,iterable为一个可迭代的对象,reverse表示是否对排序结果进行反转,而key稍微复杂一点,主要是用来对需要比较的元素进行处理......
  • 概率生成函数 (PGF)
    1.概述取值处概率的生成函数。\(F(1)=1,F'(1)=E\)2.分析设\(F(i)\)为\(i\)时刻结束概率的生成函数,\(G(i)\)为\(i\)时刻未结束概率的生成函数,那么有:\[f_i+g_i=g......
  • 算法学习笔记(数学):数论分块 + 容斥原理 + 莫比乌斯函数
    算法学习笔记(数学):数论分块+容斥原理+莫比乌斯函数这篇文章主要是要讲一道题目(链接在这里)以及梳理一下数论分块,莫比乌斯函数,容斥原理这些知识。先介绍下知识点吧qwq......
  • 8.函数上
    函数函数的原型和调用在使用函数前必须定义或者声明函数doublecircle(doubler);intmain(){ doublelength=circle(10);printf("length=%f\n",length......
  • C语言:三角函数的参数为弧度,通常的角度值需要转化为弧度
    #include<stdio.h>#include<math.h>//三角函数的参数为弧度,是角度必须转化为弧度//3.14=180,1度=3.14/180,转化方法:(3.14/180)*角度值main(){floata,b,c;......