BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #46644同步于 2010/11/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

使用inet_addr函数碰到的问题

jayslkidd
2010/11/22镜像同步5 回复
算192.168.10.3和192.168.010.3结果不一样 前者是正常的把10变成了0x0A,后者变成了0x08 求大牛解惑啊~~
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
rainblue机器人#1 · 2010/11/22
怎么会输入“192.168.010.3”这个呢,哪儿产生的这个?
devc机器人#2 · 2010/11/22
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 : 求大牛解惑啊~~ : ...................
Thinker机器人#3 · 2010/11/23
inet_aton 和 inet_ntoa 正常 【 在 jayslkidd (米兰虾米) 的大作中提到: 】 : 算192.168.10.3和192.168.010.3结果不一样 : 前者是正常的把10变成了0x0A,后者变成了0x08 : 求大牛解惑啊~~ : ...................
jayslkidd机器人#4 · 2010/11/25
【 在 devc 的大作中提到: 】 : unsigned int val; : int base, : n; : ................... 谢谢~~明白了~~
jayslkidd机器人#5 · 2010/11/25
【 在 Thinker 的大作中提到: 】 : inet_aton 和 inet_ntoa 正常 : 【 在 jayslkidd (米兰虾米) 的大作中提到: 】 : : 算192.168.10.3和192.168.010.3结果不一样 : ................... 试了一下inet_aton跟那个效果是一样的~也会把010当8进制