zoukankan      html  css  js  c++  java
  • struct in_addr 结构体

    struct in_addr 结构体:

    struct in_addr {

        in_addr_t s_addr;

    };

    表示一个32位的IPv4地址。

    in_addr_t一般为32位的unsigned int,其字节顺序为网络字节序,即该无符号数采用大端字节序。其中每8位表示一个IP地址中的一个数值。

    打印的时候可以调用inet_ntoa()函数将其转换为char*类型。

    头文件为:#include <arpa/inet.h>

    inet——ntoa()函数用于将一个十进制网络字节序转换为点分十进制IP格式的字符串。

    函数原型为:char*inet_ntoa(struct in_addr in);

    头文件为:arpa/inet.h

    网络字节序和主机字节序比较容易混乱(大端表示和小端表示)。

    网络字节序采用大端表示,就是数据的高位要存放到低地址。

    而大多数主机字节序采用小端表示(也有采用大端表示的主机字节序),就是数据的低位放到低地址。

    比如无符号整型1338378,的二进制表示为:

    数据的高位----------------------------》数据的地位

    00000000  00010100  01101100  00001010

    所以采用小端表示的主机字节序时,内存中存放的形式为:

    低地址----------------------------------------》高地址

    00001010  01101100  00010100  00000000

    所以可以自己写个小程序来代替inet_ntoa()函数。

    #include<stdio.h>
    
    #include<stdlib.h>
    
    #include<string.h>
    
    void toStringIP(const unsigned int ip,char *stringIP);
    
    int main()
    
    {
    
       unsigned int ip=1338378;
    
       char* stringIP = (char*)malloc(16);
    
       memset(stringIP,0,16+1);
    
       toStringIP(ip,stringIP);
    
       puts(stringIP);
    
       return 0;
    
    }
    
     
    
    void toStringIP(const unsigned int ip,char *stringIP)
    
    {
    
      
    
       unsigned int tempIP=ip;
    
       for(int i=0;i<3;i++)
    
       {
    
          unsigned char part=(char)tempIP;
    
          char temp[4];
    
         
    
          sprintf(temp,"%d.",part);
    
     
    
          strcat(stringIP,temp);
    
      
    
          tempIP=tempIP>>8;
    
         
    
       }
    
       unsigned char part=(char)tempIP;
    
       char temp[4];
    
       sprintf(temp,"%d",part);
    
       strcat(stringIP,temp);
    
      
    
    }

     如果您觉得对您有帮助,请点赞哦^^

  • 相关阅读:
    labview dll 崩溃
    java方法01什么是方法?
    java控制流程控制10增强For循环
    Java方法05可变参数
    java流程控制09打印九九乘法表
    Java流程控制12打印三角形及DUG
    Java方法02方法的定义和调用
    Java流程控制08For循环详解
    java流程控制11break、continue、goto
    java方法04命令行传递参数
  • 原文地址:https://www.cnblogs.com/qingergege/p/6163721.html
Copyright © 2011-2022 走看看