我可以将v字符串用于IPv4地址吗?

时间:2010-11-23 16:13:37

标签: perl ip-address

骆驼书建议V字符串可用于表示IPv4地址:

$ipaddr = 204.148.40.9;   # the IPv4 address of oreilly.com

perldata关于版本字符串的主题说明:

  

请注意,使用IPv4的v字符串   除非您,否则地址不可移植   也使用inet_aton()/ inet_ntoa()   套接字包的例程。

我有两个问题:

1)为什么使用V字符串不便携? 2)将ip-address从点分表示转换为整数的“标准”方法是什么?似乎unpack "N", <v-string>有时可能会导致问题。

1 个答案:

答案 0 :(得分:5)

获取编码形式的“标准”方式是inet_aton,它处理虚线的IP地址和主机名 - 但你需要它做什么?通常情况下,最好的想法就是跳过处理这些事情和使用的所有低级接口,例如IO :: Socket。

如果你想要转换为 integer ,就像你说的那样,而不是套接字函数所期望的形式(它们在C中是类似的概念,但在Perl中则不那么重要),那么你可以继续使用pack就好了,只要你是一致的 - 不可移植的部分是套接字函数接受的格式。例如,unpack "N", pack "C4", split /\./, "1.2.3.4"将为您提供该地址的一个很好的无符号大端表示形式(格式为16909060 == 0x01020304)。