首页 > 解决方案 > 如何使用 inet_aton() 将 IP 地址转换为二进制形式

问题描述

我从手册页中了解到 inet_aton() 将 Internet 主机地址从 IPv4 数字和点表示法转换为二进制形式(按网络字节顺序)并将其存储在结构中。所以我尝试了下面的代码。如果我错了,有人可以纠正我:)谢谢

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

int main(int argc, char **argv)
{

    struct in_addr addr;
    char a[] = "192.168.24.29"; 
    int ret = 0;

        ret = inet_aton(a, &addr);
        if (ret != 0)
        printf("Valid\n");
    else
        printf("Invalid\n");
    printf("%u\n", addr);
    printf("%u\n", addr.s_addr);
}

输出:488155328 488155328

预期产量:11000000 10101000 00011000 00011101

inet_aton() 将 IPv4 格式转换为二进制表示法(1 和 0)。那么为什么它不提供二进制文件。我在这里尝试将数字转换为 8 位的二进制格式,因为我之前的输出是 488155328 我尝试将其转换为二进制。

#include<stdio.h>
void bin(unsigned n) 
{ 
    unsigned i; 
    for (i = 1 << 7; i > 0; i = i / 2) 
        (n & i)? printf("1"): printf("0"); 
} 

int main(void) 
{ 
    bin(192); 
    printf("\n"); 
    bin(168);
    printf("\n");
    bin(24);
    printf("\n");
    bin(29);
    printf("\n");
    printf("My conversion:");
    bin(488155328);
} 

输出:11000000 10101000 00011000 00011101 我的转换:11000000

预期是:我的转换应该是 11000000 10101000 00011000 00011101

标签: clinuxsocketsunix

解决方案


推荐阅读