如何在Perl中输出二进制文件?

时间:2012-11-29 05:50:55

标签: perl file-io

我希望能够输出0x41,并将其显示为A

这是我到目前为止所尝试的:

my $out;
open $out, ">file.txt" or die $!;
binmode $out;
print $out 0x41;
close $out;

在结果文件中输出65而不是A。这不是我想要的。

我也读过this similar question,但我不会转移答案。 pack短结果为2个字节而不是1个字节。

3 个答案:

答案 0 :(得分:3)

您可以使用chr(0x41)

对于较大的结构,您可以使用pack

pack('c3', 0x41, 0x42, 0x43) # gives "ABC"

关于您对pack的怀疑,请阅读其页面 - 它非常通用。 'c'打包一个字节,'s'(如该问题所示)将打包一个双字节字。

答案 1 :(得分:1)

使用chr功能:

print $out chr 0x41

答案 2 :(得分:1)

pack需要两个参数:第一个参数解释了如何必须打包多少数据:

perl -e 'printf "|%s|\n",pack("c",0x41,0x42,0x44);'
|A|

perl -e 'printf "|%s|\n",pack("c3",0x41,0x42,0x44);'
|ABD|

perl -e 'my @bytes=(0x41,0x42,0x43,0x48..0x54);
         printf "|%s|\n",pack("c".(1+$#bytes),@bytes);'
|ABCHIJKLMNOPQRST|

你甚至可以在第一部分混合格式:

perl -e 'printf "|%s|\n",pack("c3B8",0x41,0x42,0x44,"01000001");'
|ABDA|