我希望能够输出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个字节。
答案 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|