返回信息流算192.168.10.3和192.168.010.3结果不一样
前者是正常的把10变成了0x0A,后者变成了0x08
求大牛解惑啊~~
这是一条镜像帖。来源:北邮人论坛 / cpp / #46644同步于 2010/11/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
使用inet_addr函数碰到的问题
jayslkidd
2010/11/22镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
unsigned int val;
int base,
n;
char c;
u_int parts[4];
u_int *pp = parts;
for (;;)
{
/*
* Collect number up to ``.''. Values are specified as for C: 0x=hex,
* 0=octal, other=decimal.
*/
val = 0;
base = 10;
if (*cp == '0')
{
if (*++cp == 'x' || *cp == 'X')
base = 16, cp++;
else
base = 8;
}
while ((c = *cp) != '\0')
{
if (isdigit((unsigned char) c))
{
val = (val * base) + (c - '0');
cp++;
continue;
}
if (base == 16 && isxdigit((unsigned char) c))
{
val = (val << 4) +
(c + 10 - (islower((unsigned char) c) ? 'a' : 'A'));
cp++;
continue;
}
break;
}
if (*cp == '.')
{
/*
* Internet format: a.b.c.d a.b.c (with c treated as 16-bits)
* a.b (with b treated as 24 bits)
*/
if (pp >= parts + 3 || val > 0xff)
return 0;
*pp++ = val, cp++;
}
else
break;
}
解析的方式差不多就是这样,以0开头的话会被当成8进制的,如果以0x(X)开头的话会被当成 16 进制的。
【 在 jayslkidd 的大作中提到: 】
: 算192.168.10.3和192.168.010.3结果不一样
: 前者是正常的把10变成了0x0A,后者变成了0x08
: 求大牛解惑啊~~
: ...................
inet_aton 和 inet_ntoa 正常
【 在 jayslkidd (米兰虾米) 的大作中提到: 】
: 算192.168.10.3和192.168.010.3结果不一样
: 前者是正常的把10变成了0x0A,后者变成了0x08
: 求大牛解惑啊~~
: ...................
【 在 devc 的大作中提到: 】
: unsigned int val;
: int base,
: n;
: ...................
谢谢~~明白了~~
【 在 Thinker 的大作中提到: 】
: inet_aton 和 inet_ntoa 正常
: 【 在 jayslkidd (米兰虾米) 的大作中提到: 】
: : 算192.168.10.3和192.168.010.3结果不一样
: ...................
试了一下inet_aton跟那个效果是一样的~也会把010当8进制