在 perl 中将数据打印为 hexdump

Posted

技术标签:

【中文标题】在 perl 中将数据打印为 hexdump【英文标题】:printing data as hexdump in perl 【发布时间】:2016-09-22 04:57:50 【问题描述】:

我正在尝试,但看起来它仅在我使用十六进制转储值“硬编码”变量时才有效。在下面的代码中,针对第一种情况打印 hexdump,但对于第二种情况 ($var2),它只打印从文件句柄中读取的数据

#!/usr/bin/perl
use Data::Dumper;
$var = "\xE9\x92\x97\xAF\xE9\x92\x97\xB5";
print "the first dumper is\n";
print Dumper($var);
my $filename = 'c.txt';
open($fh, "<", $filename);

local $/;
$var2 = <$fh>;
chop($var2);

close($fh);
$var5 = $var2;
print "the second dumper is\n";
print Dumper($var5);

上面代码的输出是

[root@abc]# perl code.pl 

第一个倾倒者是

$VAR1 = 'é’—¯é’—µ';

第二个倾倒者是

$VAR1 = '"\\xE9\\x92\\x97\\xAF\\xE9\\x92\\x97\\xB5"';

看起来 perl 正在为文件句柄输入中的每个斜杠附加一个额外的反斜杠。如何将文件句柄数据打印为 hexdump? c.txt文件的内容是

[root@abc]# cat c.txt 
"\xE9\x92\x97\xAF\xE9\x92\x97\xB5"

【问题讨论】:

我想你想要打包和解包,perldoc.perl.org/perlpacktut.html。但是我无法确定您是想要第一个输出还是第二个输出。还是您只是想弄清楚发生了什么? @Dan,我想要第一个输出 【参考方案1】:

你可以这样做

#!/usr/bin/perl
use Data::Dumper;
$var = "\xE9\x92\x97\xAF\xE9\x92\x97\xB5";
print "the first dumper is\n";
print Dumper($var);
my $filename = 'c.txt';
open($fh, "<", $filename);

local $/;
$var2 = <$fh>;
chop($var2);

close($fh);
$var5 = $var2;
$var5 =~ s/"|\\x//g;
print "the second dumper is\n";
print Dumper(pack("H*",$var5));

我正在使用搜索和替换来删除所有 " 字符和 \x,因为这些字符只是用来帮助使其易于阅读。然后将其打包为十六进制字符串。

【讨论】:

以上是关于在 perl 中将数据打印为 hexdump的主要内容,如果未能解决你的问题,请参考以下文章

在 Perl 中将二进制数据拆分为字节数组

如何在 Perl 中将日期转换为纪元时间?

在 Perl 中将纪元时间转换为标准约定的问题

在 Windows 上的 perl 中将纪元转换为本地时间

在 Perl 中将文件转换为字符串的最佳方法是啥?

如何在 Perl 中将纪元时间转换为正常时间?