IP地址转换、主机大小端、htonl、ntohl实现

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

#include <IOSTREAM> //#include <WINSOCK.H> using std;  

  •   
  • typedef  uint16;  
  •  unsigned   uint32;  
  • // 短整型大小端互换 #define BigLittleSwap16(A)  ((((uint16)(A) & 0xff00) >> 8) | \ // 长整型大小端互换 #define BigLittleSwap32(A)  ((((uint32)(A) & 0xff000000) >> 24) | \ // 本机大端返回1,小端返回0 int {  
  •         unsigned   i;  
  •  s[4];  
  •     }c;  
  •  (0x12 == c.s[0]);  
  • }  
  • // 模拟htonl函数,本机字节序转网络字节序   t_htonl(unsigned   h)  
  • {  
  •   
  •       
  •  checkCPUendian() ? h : BigLittleSwap32(h);  
  • }  
  • // 模拟ntohl函数,网络字节序转本机字节序   t_ntohl(unsigned   n)  
  • {  
  •   
  •       
  •  checkCPUendian() ? n : BigLittleSwap32(n);  
  • }  
  • // 模拟htons函数,本机字节序转网络字节序   t_htons(unsigned   h)  
  • {  
  •   
  •       
  •  checkCPUendian() ? h : BigLittleSwap16(h);  
  • }  
  • // 模拟ntohs函数,网络字节序转本机字节序   t_ntohs(unsigned   n)  
  • {  
  •   
  •       
  •  checkCPUendian() ? n : BigLittleSwap16(n);  
  • }  
  • //8个二进制(2个十六进制)数转换成十进制数,不含a-f。即00-99的转换    int x)    
  • {    
  •  y;  
  •      temp;  
  •   
  •   
  •     y+=temp*16;    
  •  y;    
  • }    
  • //32个二进制(4个十六进制)数转换成十进制数,不含a-f。即0000-9999的转换    void x)    
  • {    
  •   
  •      temp1=x%100;    
  •  y1=transfer_0(temp1);    
  •       
  •  temp2=(x%10000-temp1)/100;    
  •      y2=transfer_0(temp2);    
  •  temp3=(x%1000000-temp1-temp2*100)/10000;    
  •  y3=transfer_0(temp3);    
  •       
  •  temp4=(x%100000000-temp1-temp2*100-temp3*10000)/1000000;    
  •      y4=transfer_0(temp4);    
  • ,y4,y3,y2,y1);    
  • //将16进制数数转化成10进制数,一位的0-F。    int x)    
  •  y=0;  
  •  (x>= && x<=)  
  •     {    
  • ;    
  •          y;    
  •  (x>= && x<=)  
  • +10;    
  •  y;    
  •     }    
  •  (x>= && x<=)  
  •     {    
  • +10;    
  •          y;    
  • );    
  • //将16进制数数转化成10进制数,八位的00000000-FFFFFFFF。    void x[], n)  
  •   
  •  y0=transfer_0(x[0]);    
  •      y1=transfer_0(x[1]);    
  •  y2=transfer_0(x[2]);    
  •      y3=transfer_0(x[3]);    
  •  y4=transfer_0(x[4]);    
  •      y5=transfer_0(x[5]);    
  •  y6=transfer_0(x[6]);    
  •      y7=transfer_0(x[7]);    
  • ,y0*16+y1,y2*16+y3,y4*16+y5,y6*16+y7);        
  • //将16进制数数转化成10进制数,八位的00000000-FFFFFFFF。    void x[])    
  • {    
  •   
  •      y1=transfer_0(x[0])*16+transfer_0(x[1]);    
  •  y2=transfer_0(x[2])*16+transfer_0(x[3]);    
  •      y3=transfer_0(x[4])*16+transfer_0(x[5]);    
  •  y4=transfer_0(x[6])*16+transfer_0(x[7]);    
  •       
  • ,y1,y2,y3,y4);        
  • }    
  • int  ret;  
  •     ret = checkCPUendian();  
  •  (ret == 1)  
  • );  
  •   
  • );  
  •  0;  

本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/3859833.html,如需转载请自行联系原作者
相关文章
|
4月前
|
网络协议 Linux 网络架构
Linux三种网络模式 | 仅主机、桥接、NAT
Linux三种网络模式 | 仅主机、桥接、NAT
171 0
|
8月前
|
网络协议 虚拟化 网络架构
VM虚拟机三种网络配置详解(桥接、NAT、仅主机)
VM虚拟机三种网络配置详解(桥接、NAT、仅主机)
361 0
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(七)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(七)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(七)
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(六)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(六)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(六)
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(五)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(五)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(五)
|
分布式计算 Hadoop Linux
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(四)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(四)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(四)
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(三)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(三)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(三)
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(二)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(二)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(二)
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(一)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(一)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(一)