侧边栏壁纸
  • 累计撰写 185 篇文章
  • 累计创建 77 个标签
  • 累计收到 17 条评论

目 录CONTENT

文章目录

C/C++语言中socket IP地址的结构体

码峰
2023-02-01 / 0 评论 / 0 点赞 / 529 阅读 / 309 字 / 正在检测是否收录...
广告 广告

struct in_addr结构体

struct in_addr结构体是C/C++ socket编程中比较常用的结构体,主要是保存IP地址的信息,查看源码可以发现,这个结构体实际上是一个联合体,可以多种形式操作这个结构体。

struct in_addr {
    union {   
        struct {     
            u_char s_b1,s_b2,s_b3,s_b4;   
        } S_un_b;      //An IPv4 address formatted as four u_chars.  
        struct {     
            u_short s_w1,s_w2;   
        } S_un_w;   //An IPv4 address formatted as two u_shorts
        u_long S_addr; //An IPv4 address formatted as a u_long
    } S_un;
};

struct in_addr结构体使用

struct in_addr结构体的使用参考代码如下:

#include<stdio.h>
#include<winsock2.h>

#pragma comment(lib, "ws2_32.lib")

int main()
{
    in_addr addr;
    addr.S_un.S_un_b.s_b1 = 222;
    addr.S_un.S_un_b.s_b2 = 205;
    addr.S_un.S_un_b.s_b3 = 41;
    addr.S_un.S_un_b.s_b4 = 160;
    printf("%s\n", inet_ntoa(addr)); //222.205.41.160

    in_addr addr1;
    addr1.S_un.S_un_w.s_w1 = htons((222 << 8) + 205);
    addr1.S_un.S_un_w.s_w2 = htons((41 << 8) + 161);
    printf("%s\n", inet_ntoa(addr1)); //222.205.41.161

    in_addr addr2;
    addr2.S_un.S_addr = htonl((((((222 << 8) + 205) << 8) + 41) << 8) + 162);
    printf("%s\n", inet_ntoa(addr2)); //222.205.41.162
}
0
广告 广告

评论区