Perl中pack与unpack是否互为逆操作?为何pack无输出?
Perl中pack("N", 整数)无输出的原因
首先明确两个核心问题:
- 你第一条命令的写法存在语法错误:
unpack("N", 127.0.0.1)在Perl里会被解析为127.0 / 0.0 / 0.1,这会触发除以零的报错。你能得到2130706433(对应127.0.0.1的网络字节序整数),应该是实际执行了正确的写法,比如unpack("N", pack("C4", 127,0,0,1)),把IP拆分为字节后再转成网络字节序整数。 - 第二条命令
pack("N", 2130706433)的结果是四个字节的二进制字符串:\x7F\x00\x00\x01。其中\x00是空字符,终端打印字符串时遇到空字符会直接截断输出;而\x7F是DEL控制字符,本身也不可见,所以你看起来没有输出,但实际上pack已经生成了正确的二进制数据。
如果要验证pack的结果,可以把二进制转成可见格式:
# 转成十六进制查看 perl -le 'print unpack("H*", pack("N", 2130706433))' # 输出:7f000001 # 转回IP格式 perl -le 'print join(".", unpack("C4", pack("N", 2130706433)))' # 输出:127.0.0.1
内容的提问来源于stack exchange,提问作者user1766349
相关产品推荐
相关产品推荐

