这是我用来将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);