我从使用ip2long()的php生成的网页反序列化数据。但是,当我尝试使用IPAddress的构造函数中的整数值来创建新的IP地址时,ip地址的虚线版本是相反的顺序?
例如:
4.3.2.1应该是1.2.3.4
有关如何解决此问题的任何想法?
答案 0 :(得分:1)
听起来有人正在使用little-endian,有人正在使用网络字节顺序(big-endian)来打包值。例如, octect序列折衷整数,LE中的AA,BB,CC,DD
在BE / NBO中是DD,CC,BB,AA
- 一个很好的对称反转!
由于IPAddress(Int64) constructor documentations说:
假设Int64值是网络字节顺序。
我想想象 PHP中的ip2long
正在以little-endian生成一个值。好东西IPAddress
也需要byte[]
作为构造函数,现在让那些肘部油腻......只需按照“正确”的顺序传递字节。
快乐的编码。
How to convert an int to a little endian byte array?处的代码应该提供一些想法。
或者,正如Josh所指出的,有一种HostToNetworkOrder方法可以做到这一点。
答案 1 :(得分:0)
使用long2ip()
来反转ip2long()
<?php
// make sure IPs are valid. also converts a non-complete IP into
// a proper dotted quad as explained below.
$ip = long2ip(ip2long("127.0.0.1")); // "127.0.0.1"
$ip = long2ip(ip2long("10.0.0")); // "10.0.0.0"
$ip = long2ip(ip2long("10.0.256")); // "10.0.1.0"
?>
你应该不会有任何问题,毕竟它是php的标准