将整数ip转换为ipaddress对象。字符串ip是否反转?

时间:2011-09-09 03:35:30

标签: c# string

我从使用ip2long()的php生成的网页反序列化数据。但是,当我尝试使用IPAddress的构造函数中的整数值来创建新的IP地址时,ip地址的虚线版本是相反的顺序?

例如:

4.3.2.1应该是1.2.3.4

有关如何解决此问题的任何想法?

2 个答案:

答案 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的标准