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];
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: WM_NOTIFY