我希望能输出0x41
,并且将其显示为A
。
目前为止,我尝试过以下方法:
my $out;
open $out, ">file.txt" or die $!;
binmode $out;
print $out 0x41;
close $out;
在生成的文件中,它输出65
而不是A
。这不是我想要的。
我也阅读了这个类似的问题,但我不会直接转移答案。使用pack
将短结果打包为2字节而不是1字节。
我希望能输出0x41
,并且将其显示为A
。
目前为止,我尝试过以下方法:
my $out;
open $out, ">file.txt" or die $!;
binmode $out;
print $out 0x41;
close $out;
在生成的文件中,它输出65
而不是A
。这不是我想要的。
我也阅读了这个类似的问题,但我不会直接转移答案。使用pack
将短结果打包为2字节而不是1字节。
chr
可以适用于任何字节值(0-255)。它与 Unicode 有更复杂的关系。不过,pack
是相当可靠的,因为你可以根据需要定制模板。 - Amadanpack('C', ...)
。否则对于大于0x7f的值会出现警告“Character in 'c' format wrapped in pack”(尽管输出是正确的)。 - MattTTpack需要两个参数:第一个参数解释了需要打包的数据的方式和数量:
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|
print $out chr 0x41