【发布时间】:2015-12-04 06:52:54
【问题描述】:
我的灵感来自Conversion of IP address to integer
我的代码如下所示:
uint32_r parseIPV4string(char * ipAddress){
char ipbytes[4];
sscanf(ipAddress, "%uhh.%uhh.%uhh.%uhh", &ipbytes[3], &ipbytes[2], &ipbytes[1], &ipbytes[0]);
return ipbytes[0] | ipbytes[1] << 8 | ipbytes[2] << 16 | ipbytes[3] << 24;
}
实际上是一个精确的副本,但是我的问题是,我的 IP 地址没有正确显示。我震惊和敬畏地看着“129.173.118.0”和“129.173.31.187”都返回2164260864
有人可以解释发生了什么吗?
也许我错误地使用了解析器,我不确定它是如何工作的,即“%uhh”。对我来说是新的,我不知道返回声明中发生了什么。
【问题讨论】:
-
这就是为什么你检查
scanf和朋友的返回值 -
"%hhu"修饰符应该放在第一位而且应该是unsigned char ipbytes[4]; -
请注意,这些是带符号的字符,它们被符号扩展为整数。
-
为什么要重新实现 inet_pton() ?
标签: c