IP的网络字节序

TCP/IP统一规定使用大端方式传输数据,也称为网络字节顺序。

1、c里面的inet_addr返回的是网络字节序

2、mysql的inet_aton返回的是主机字节序,其手册上说是网络字节序是不对的

3、php的long2ip接收的参数是无符号的主机字节序

4、php中没有提供网络字节序和主机字节序之间的转换,可以用以下代码将网络字节序地址转成点分十进制格式

// 192.168.5.242的网络字节序
$pi = 4060457152;// 注意不要用intval($pi)转换,对int还可以,如果值超过int,就溢出了
// 获取网络字节序的二进制表示,其中“N”表示按大头序(网络字节序)逐一得到$pi的四个字节
$binarydata = pack("N", $pi);

// 可以写到文件中,用十六进制编辑器查看得到的四个字节的二进制
//$fp = fopen('text.txt', 'w');
//fwrite($fp, $binarydata);
//fclose($fp);

// 'L'表示按主机字节序对二进制数据$binarydata进行字节重新编排以获取整数
$arr = unpack('L', $binarydata);
// php文档中说'L'得到是无符号整数,是错误的, 实际得到的是有符号数,需要用下面的代码进行转换
$u = (float)sprintf("%u", $arr[1]);
// 把无符号主机字节序整数转换成电分十进制格式
$ip = long2ip($u);
// 输出192.168.5.242
echo $ip;


另外还有一种简单的方式是

//$pi是网络字节序
$ip = long2ip($pi);
// 把转换的结果调换一下顺序
$tmpip = explode('.',$ip);
$ip = $tmpip[3].'.'.$tmpip[2].'.'.$tmpip[1].'.'.$tmpip[0];



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值