3

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

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

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

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

我也读过这个类似的问题,但我不会把答案转移过来。pack一个简短的结果是 2 个字节而不是 1 个字节。

4

3 回答 3

3

您可以使用chr(0x41).

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

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

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

于 2012-11-29T05:54:30.303 回答
1

使用 chr 函数:

print $out chr 0x41
于 2012-11-29T05:53:39.137 回答
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|
于 2012-11-29T06:20:33.073 回答