Perl在一个变量中打包和解包二进制数据



我有一些二进制数据,它们来自一个库函数,我将其存储在一个名为$data 的变量中

如果我将此二进制数据用以下项进行hefy:$hexstring=解压缩"H*",$data;

它正确地执行了这个十六进制转换,我根据unix命令验证了我的结果:od-c和xxd-p:-)

我的问题是如何执行反向操作,将这些数据从十六进制数据打包回$newdata变量?

如果我做了一个ref($data),它会返回一个空白结果,所以我不明白$data变量中这个二进制数据最初的格式是什么。图书馆的作者告诉我这是一个字符串,但我的经验试图包装一个字符串时,它不会产生正确的结果。

我试过各种尝试来"打包",但我似乎不知道如何正确打包。我偶然发现一件事

请帮我理解我的包装错误;-)

谢谢!

在这种情况下非常简单。unpack 'H*'的逆运算是pack 'H*'

这是一个演示的程序

use strict;
use warnings 'all';
use 5.10.1;
my $data = "x01x23x45x67x89xABxCDxEF";
my $hex = unpack "H*", $data;
say $hex;
my $newdata = pack "H*", $hex;
say $newdata eq $data ? 'OK' : 'FAIL';

输出

0123456789abcdef
OK

最新更新