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

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

时间:2022-10-07 10:23:06浏览次数:49  
标签:__ 字节 主机 unsigned long uint16 函数

首先我们要对于网络字节序和主机字节序有一个初步的概念。

字节序:字节在内存中储存的顺序

字节序的种类:(1):大端字节序,数值高位储存在内存的低地址,低位储存在内存的高地址,在                           两个电脑之间传输时候用的

                        (2):小端字节序,数值低位储存在内存的低地址,高位储存在内存的高地址,在                            自己电脑上传输东西用的

主机字节序:CPU存储数据时采用的字节顺序,不同CPU采用的字节序是不同的。

网络字节序:使用的统一字节顺序,避免兼容问题。

关于两者的相互转换,我们将在Linux里面进行

我们经常会使用以下四个C标准库函数进行字节的转换:

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);        //把uint32_t类型从主机序转换到网络序
uint16_t htons(uint16_t hostshort);        //把uint16_t类型从主机序转换到网络序
uint32_t ntohl(uint32_t netlong);        //把uint32_t类型从网络序转换到主机序
uint16_t ntohs(uint16_t netshort);        //把uint16_t类型从网络序转换到主机序

借鉴的两者转换代码:

//主机序转网络序
unsigned long long htonll(unsigned long long val)
{
    if(__BYTE_ORDER == __LITTLE_ENDIAN)  
    {
         return (((unsigned long long )htonl((int)((val << 32) >> 32))) << 32) | (unsigned int)htonl((int)(val >> 32));  
    }  
    else if (__BYTE_ORDER == __BIG_ENDIAN)  
    {  
         return val;  
    }  
}  

//网络序转主机序
unsigned long long ntohll(unsigned long long val)  
{  
    if (__BYTE_ORDER == __LITTLE_ENDIAN)
    {
        return (((unsigned long long )ntohl((int)((val << 32) >> 32))) << 32) | (unsigned int)ntohl((int)(val >> 32));  
    }  
    else if (__BYTE_ORDER == __BIG_ENDIAN)  
    {  
        return val;  
    }
 }

 

标签:__,字节,主机,unsigned,long,uint16,函数
From: https://www.cnblogs.com/HuangCB/p/16750361.html

相关文章

  • 【我开了C语言的金手指】二.函数(1)
    (一)函数的定义 是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定的任务,相较于其它的代码,具备相对独立性。 一般会有输入参数并有返回值,提供对过......
  • 【VB.NET】VB的字符操作函数
    函数以及其参数说明Asc/AscW(Char/String)AsInteger返回一个代表某个字符的字符编码的Integer值。Chr/ChrW(Integer)AsChar返回指定字符编码对应的字符。Filter(String(......
  • 我整理了50道经典Java算法题,直接进了字节跳动!!
    写在前面最近,很多小伙伴都想进入字节跳动这个快速发展的公司,而字节跳动对于算法的要求比较高。于是乎,有些小伙伴问我能否整理一些基础的算法题,帮助他们提升下基础算法能......
  • 网络字节序与主机字节序
    字节序字节序是什么呢?根据字面意思来看,就可以大概知道它的意思.就是字节在内存中存放的顺序.然而,字节序又分为大端字节序和小端字节序举个例子300......
  • g2o函数
    g2o简介g2o(GeneralGraphicalOptimization),是一个在SLAM领域广为使用的优化库。基于图优化理论。图优化理论把优化问题表现成图的一种方式。一个图由若干个顶点和连接......
  • 网络字节序与主机字节序的转换函数实践
    1、网络字节序:是TCP/IP中一种固定好的数据表示格式,它与具体的CPU,操作系统,传输方式无关,从而可以保证数据在不同主机之间传输时能够兼容。2、主机字节序:即大端(BigEndian)......
  • 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="......