0

これがコードの一部です。binmode で 16 進数をファイルに書き込もうとしています。

#!/usr/bin/perl
die "Usage: $0 infile outfile" unless scalar(@ARGV) > 1;
open(my $out, '>', $ARGV[1]) or die "cannot open in file: $!";
binmode($out);
$PrevlastByte = 116;
my $PrevlastByte = pack 'H*', $PrevlastByte;
print $out "$PrevlastByte";

$PrevlastByte は 116 で、これに相当する 16 進数は 74 です。出力ファイルを見ると、11 と 60 の 2 バイトのデータがあります。16 進ビューアで見ると、出力ファイルに 1 バイトのデータ、つまり 0x74 が必要です。これはどのように行うことができますか。助けてください。

4

1 に答える 1

1

六角は必要ありません。16 進数は、数値の文字列表現です。文字 116 10別名文字 74 16が必要です。

次のいずれかを使用して取得します。

chr(116)
chr(0x74)
pack('C', 116)
pack('C', 0x74)
"\x74"
...

ところで、STDOUT を利用する必要があります。

#!/usr/bin/perl
binmode STDOUT;
my $PrevlastByte = 116;
print pack 'C', $PrevlastByte;
于 2013-05-29T05:57:28.813 に答える