代码之家  ›  专栏  ›  技术社区  ›  Eugene Yarmash

我可以对IPv4地址使用V字符串吗?

  •  3
  • Eugene Yarmash  · 技术社区  · 14 年前

    camel手册建议V字符串可以用于表示IPv4地址:

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

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

    请注意,对IPv4使用V字符串 除非您 还可以使用inet_Aton()/inet_Nto()。 套接字包的例程。

    我有两个问题:

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

    1 回复  |  直到 14 年前
        1
  •  5
  •   hobbs    14 年前

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

    如果你想转换成 整数 如您所说,并且不是套接字函数所期望的形式(它们在C中是类似的概念,但在Perl中则较少),然后您可以继续使用 pack 只要你是一致的——不可移植的部分就是socket函数接受的格式。例如, unpack "N", pack "C4", split /\./, "1.2.3.4" 会给你一个很好的地址的无符号big-endian表示(以数字16909060的形式)== 0x01020304 )