从 DDN 转换为二进制时 IP 地址长度错误


Error in IP address length when converting from DDN to binary

这是我用来将IP地址从点分十进制表示法转换为二进制的:

base_convert(bin2hex(inet_pton($ip_address),16,2)

这似乎适用于大多数 IP 地址,但其中一些会导致较小的输出字符串(即少于 32 个字符)。例如,这是两个输出:

10.77.55.3
172.30.99.4

成为

1010010011010011011100000011
10101100000111100110001100000100

我希望所有输入 IP 地址在转换后都是 32 个字符。如何确保发生这种情况?

它省略了前导零。您可以通过str_pad重新添加它们。

str_pad(base_convert(bin2hex(inet_pton($ip_address),16,2)), 32, '0', STR_PAD_LEFT)

或者为了减少函数调用并避免base_convert(),您可以按照 Michael 的建议进行操作:

str_pad(decbin(ip2long('10.77.55.3')), 32, '0', STR_PAD_LEFT);