【发布时间】:2015-04-22 01:22:33
【问题描述】:
确切地说,我想编写一个程序来将 IP 地址转换为其二进制格式,如 202.117.1.20。那么有没有一种方法可以使输入以点分隔,以便我可以将 202 读取为 int 而不是字符串? 修改:为什么输入流用空格分隔,我可以把它改成点,或者我喜欢的任何字符吗?
【问题讨论】:
-
您可能对
inet_addr或相关功能感兴趣。
确切地说,我想编写一个程序来将 IP 地址转换为其二进制格式,如 202.117.1.20。那么有没有一种方法可以使输入以点分隔,以便我可以将 202 读取为 int 而不是字符串? 修改:为什么输入流用空格分隔,我可以把它改成点,或者我喜欢的任何字符吗?
【问题讨论】:
inet_addr 或相关功能感兴趣。
显而易见的可能性是:
unsigned o1, o2, o3, o4;
char dot1, dot2, dot3;
infile >> o1 >> dot1 >> o2 >> dot2 >> o3 >> dot3 >> o4;
assert(dot1=='.' && dot2=='.' && dot3=='.');
assert(o1 < 256 && o2 < 256 && o3 < 256 && o4 < 256);
如果您真的不想显式读取. 字符,您可以创建一个将. 分类为空格的ctype facet,然后使用该facet 创建一个区域设置,并使用该区域设置填充流。
如果您需要编写大量忽略输入中的. 的代码,这可能是值得的。我在another answer 中发布了这样一个方面。在这里您可以使用它,但请阅读 ints(或 unsigned 等)而不是字符串。
【讨论】: