所以我知道有些库可以为我做这个,但我想学习打包/解包。
我的目标是让用户输入一个IP地址/子网掩码,然后验证它是否有效。
我认为这样做的一种方式是" sprintf"并获得二进制值,例如192.168.1.1。这是一个很好的解决方案,但是我需要预先填写所需数量的0,使其成为“8位” 当N
能够以二进制格式放置内容时,这似乎是很多不必要的工作。我使用$ip = "192.168.1.1";
$bi = pack ("N*", $ip);
print unpack("N*",$bi),"\n";
模板找到http://perldoc.perl.org/functions/pack.html我的第一个目标是获取IP地址,将其转换为二进制,然后将其转换回来。
192
我得到的输出是 <uib-pager total-items="totalItems" items-per-page="4" ng-model="currentPage" ng-change="pageChanged()"></uib-pager>
所以很明显我不明白这里发生了什么。
到底发生了什么?
答案 0 :(得分:4)
pack ("N*", $ip)
从$ ip中取出一个整数并将其置于网络字节顺序中。
你想要的是将IP地址的4个十进制八位字节打包为二进制。无需使用字节顺序,因为IP地址字符串已经是大端(最高位字节已经在字符串的开头)。
我还将*
更改为4
,IP地址始终为4个八位字节:
$ip = "192.168.1.1";
$bi = pack "C4", split('\.', $ip);
print join('.', unpack("C4",$bi)), "\n";