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

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

时间:2022-10-09 08:55:38浏览次数:39  
标签:字节 主机 网络 uint16 数从 uint32 函数

1.字节序

字节序是处理器架构特性,用于指示像整数这样的大数据类型内部的字节如何排序。

简单来说,就是指超过一个字节的数据类型在内存中的存储的顺序。

那么很明显,像char这样的类型,肯定不存在字节序的问题了。

不同类型的处理器采用的字节序可能不同。

2.大小端

大端字节序(big-endian):高位字节数据存放在低地址处,低位数据存放在高地址处;

小端字节序(little-endian):高位字节数据存放在高地址处,低位数据存放在低地址处。

3.网络字序与主机字序

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

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

网络字节序采用大端字节序。
4.转换

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

#include <arpa/inet.h>

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

n代表“network”---网络,h代表“host”---主机,l代表long的长度(32位),s代表short的长度(16位)
在使用小端字节序的系统中,也就是主机字节序和网络字节序不同,所以这些函数会把字节序进行转换
在使用大端字节序的系统中,也就是主机字节序和网络字节序相同,不需要转换,这些函数会定义成空宏

原文链接:https://blog.csdn.net/m0_38062470/article/details/110680118

标签:字节,主机,网络,uint16,数从,uint32,函数
From: https://www.cnblogs.com/huangsuantou/p/16770927.html

相关文章

  • 02#对数函数:换底公式
    什么是换底公式有一个对数logab,把a的底数换成c,那么就有logcb/logca,这个过程就叫作换底。新的底数c可以是10、5、e等,具体的情况要根据题目要求来决定。换底公式在......
  • 01#对数函数:认识 log 函数
    什么是对数对数用log符号来表示。根据底数的不同,log可以变换成lg、ln。lg是以10为底的对数,ln是以e为底的对数。对数长成下面这个样子,是一个以a为底,y为真数......
  • 网络字节序与主机字节序的转换函数实践
    首先介绍什么是网络字节序和主机字节序网络字节序网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机......
  • 网络字节序与主机字节序的转换函数实践
    首先需要了解知识:1.字节序(1)小端字节序,数值低位存储在内存的低地址,高位存储在内存的高地址。(2)大端字节序,数值高位存储在内存的低地址,低位存储在内存的高地址。主机字......
  • 网络字节序与主机字节序的转换函数实践
    网络字节序与主机字节序的转换函数实践 1.网络字节序与主机字节序在Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰......
  • MYSQL-->存储过程与存储函数
    介绍存储过程是事先经过编译并且存储在数据库中的一段SQL语句的集合。调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,有助于提高数......
  • 网络字节与主机字节序的转换函数实践
     1.为什么要进行转换?1.1在进行网络编程时,由于网络字节的顺序和主机的字节顺序可能存在不同,需要进行转换以统一“格式”2.什么是网络字节顺序和主机字节顺序呢?2.1网络......
  • 网络字节序与主机字节序的转换函数实践
    什么是字节序?字节序,顾名思义,就是字节组织的顺序。我们可以将其根据其存储时从低位开始还是从高位开始分为两种,具体如下:类型简写本质大端BE(bigendian)将高序......
  • Python 函数装饰器
    fromtimeimportctime,sleepdeftsfunc(func):defwrappedFunc(a):print'[%s]%s()called,a=%s'%(ctime(),func.__name__,a)returnfunc()......
  • Fortran 函数中单精度,双精度不匹配的错误
    错误实例01:programsubroutinereal*4arrarr=1.1callfun1(arr)endsubroutinefun1(arr)real*8arrwrite(*,*)arrend情况下主程序定义了......