问题描述
我最近使用库编写了 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 (将#修改为@)