如何解决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 举报,一经查实,本站将立刻删除。