2

私は Perl のunpack関数を理解しようとしてきましたが、全体を理解することはできません。

私が持っているもの: 文字列と 16 ビットの 16 進チェックサム (例"this is my string": "0671")

"this is my string"それが checksum と等しいことを確認する必要があります'0671'

したがってunpack("%16W*", $string)、16ビットの10進数値が得られることはわかっていますが、16進数表現が必要です。これは簡単なことだと思いますので、私の無知をお許しください。

4

2 に答える 2

4

あなたが言ったように、unpack("%16W*", $string)あなたに整数を与えます。整数を 16 進数に変換するには、sprintfを使用します。

my $string = "this is my string";
my $expected = '0671';

my $checksum = sprintf('%04x', unpack("%16W*", $string));
print "match\n" if $checksum eq $expected;

大文字の 16 進数が必要な場合は、%X代わりに%x(または%04Xこの場合) を使用します。

または、別の方法でhexを使用して 16 進チェックサムを整数に変換することもできます。

my $string = "this is my string";
my $expected = '0671';

my $checksum = unpack("%16W*", $string);
print "match\n" if $checksum == hex $expected; # now using numeric equality
于 2011-02-22T21:34:20.060 に答える
-1

試してみてくださいunpack("b*',$string)

構文については、パックのマニュアル ページを参照してください。

于 2011-02-22T20:34:46.117 に答える