了解pack / unpack perl

时间:2016-02-11 06:45:02

标签: perl pack

所以我知道有些库可以为我做这个,但我想学习打包/解包。

我的目标是让用户输入一个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> 所以很明显我不明白这里发生了什么。

到底发生了什么?

1 个答案:

答案 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";