微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C 编码 :: 将 IPv4 数组转换为 u_int32_t?

如何解决C 编码 :: 将 IPv4 数组转换为 u_int32_t?

我最近使用库编写了 C 代码。该库之前将 IPv4 地址定义为 u_int8_t 的一维数组。例如,如果我想表示 IP 地址 10.20.30.40,这很简单:

u_int8_t ipv4Array[4];         // Defined in the library

// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// My code:

void printIP( u_int8_t* x ){
        printf(">> %d.%d.%d.%d\n",x[0],x[1],x[2],x[3]);
}

void foo(){
        u_int8_t* myIP = (u_int8_t*) malloc( sizeof(ipv4Array) );
        myIP[0] = 10;
        myIP[1] = 20;
        myIP[2] = 30;
        myIP[3] = 40;

        printIP( myIP );

        free( myIP );
}

输出是:

>> 10.20.30.40

非常简单,我喜欢这种方式。但是,该库的作者发布了一个更新,其中 IPv4 地址现在表示为 u_int32_t。我不确定如何修改我的代码。这是我最好的尝试:

u_int32_t* ipv4;           // *New* deFinition in the library

// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// My code:

void foo(){
        ipv4 = (u_int32_t*) malloc( sizeof(u_int32_t) );
        bzero( ipv4,sizeof(u_int32_t) );

        *ipv4 += 10<<24;
        *ipv4 += 20<<16;
        *ipv4 += 30<<8;
        *ipv4 += 40;

        printf(">> %u\n",*ipv4);

        free( ipv4 );
}

输出为:

>> 169090600

所以我很高兴看到这一点:

Decimal:  169090600

Binary:   0000 1010  0001 0100  0001 1110  0010 1000
              10         20         30         40

这表明我的黑客是正确的。但我很紧张,不先检查就将其插入生产代码。任何人都可以看到我的解决方案有问题吗?欢迎所有批评。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。