首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解pack / unpack perl

理解pack / unpack perl
EN

Stack Overflow用户
提问于 2016-02-11 06:45:01
回答 1查看 2.4K关注 0票数 2

因此,我知道有一些库可以为我做到这一点,但我想学习包/解包。

我的目标是让用户输入一个ip地址/子网掩码,然后验证它是否有效。

我认为这样做的一种方法是"sprintf“,并获得一个二进制值,比如192.168.1.1。这是一个好的解决方案,但我需要预置所需的0的数量,而不是“8位”。

pack可以将东西放入二进制格式时,这似乎是很多不必要的工作。我使用了N模板,我找到了http://perldoc.perl.org/functions/pack.html,我的第一个目标是获取ip地址,将其转换为二进制,然后再将其转换回来。

代码语言:javascript
复制
$ip = "192.168.1.1";    
$bi = pack ("N*", $ip);    
print unpack("N*",$bi),"\n";

我得到的输出是192,所以很明显,我不明白这里发生了什么。

这到底是怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-11 06:56:34

pack ("N*", $ip)从$ip中提取一个整数,并将其按网络字节顺序排列。

您想要的是将IP地址的4个十进制八位数打包为二进制。不需要摆弄endianness,因为IP地址字符串已经在大端(最高顺序的字节已经在字符串的开头)。

我还将*更改为4,IP地址总是4字节长:

代码语言:javascript
复制
$ip = "192.168.1.1";    
$bi = pack "C4", split('\.', $ip);
print join('.', unpack("C4",$bi)), "\n";
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35332535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档