【问题标题】:inet_aton normalization of a IPv4 addressIPv4 地址的 inet_aton 规范化
【发布时间】:2013-04-05 15:04:04
【问题描述】:

inet_aton 不应该规范化互联网地址的点版本吗?为什么我会在下面的示例中得到不同的输出值?

int main(){
    char USER_IP[16] = "192.168.002.025";
    char USER_IP2[16] = "192.168.2.25";
    struct sockaddr_in addr;
    struct sockaddr_in addr2;

    inet_aton(USER_IP2, &addr.sin_addr);
    inet_aton(USER_IP, &addr2.sin_addr);

    printf("addr.sin_addr:%lu\n", addr.sin_addr);
    printf("addr2.sin_addr:%lu\n", addr2.sin_addr);


    return 0;
}

输出:

addr.sin_addr:419604672
addr2.sin_addr:352495808

【问题讨论】:

    标签: c linux radix inet-aton


    【解决方案1】:

    来自documentation

    点分地址的组成部分可以指定为十进制、八进制(以 0 开头)或 >十六进制,以 0X 开头)

    这意味着

    char USER_IP[16] = "192.168.002.025";
    

    暗示 192 168 2 (25 Octal == 21) 和

    char USER_IP2[16] = "192.168.2.25";
    

    暗示 192 168 2 25

    【讨论】:

      最近更新 更多