【问题标题】:Can I use v-strings for IPv4 addresses?我可以将 v-strings 用于 IPv4 地址吗?
【发布时间】:2010-11-23 16:13:36
【问题描述】:

骆驼书建议 V-strings 可用于表示 IPv4 地址:

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

但是perldata 关于版本字符串的主题声明:

注意,使用 IPv4 的 v-strings 地址是不可移植的,除非你 也使用 inet_aton()/inet_ntoa() Socket包的例程。

我有两个问题:

1) 为什么使用 v-strings 不能移植?
2)将IP地址从点分符号转换为整数的“标准”方法是什么?似乎unpack "N", <v-string> 有时会引起问题。

【问题讨论】:

    标签: perl ip-address


    【解决方案1】:

    获取编码形式的“标准”方式是inet_aton,它处理点分IP 地址和主机名——但你需要它做什么?通常最好的办法就是跳过所有处理此类事情并使用的低级接口,例如 IO::Socket。

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

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 2021-03-16
      • 2021-12-24
      • 2015-04-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多