Как получить контрольную сумму от распаковки в шестнадцатеричном формате? - PullRequest
2 голосов
/ 22 февраля 2011

Я пытался выяснить функцию unpack в Perl и не могу понять всего этого.

Что у меня есть: Строка и 16-битная шестнадцатеричная контрольная сумма (например, "this is my string", "0671")

Мне нужно проверить, что "this is my string" равно контрольной сумме '0671'.

Так что я знаю, unpack("%16W*", $string) даст мне 16-битное десятичное значение, но мне нужно шестнадцатеричное представление. Я знаю, что это легко, поэтому, пожалуйста, прости мое невежество.

Ответы [ 2 ]

4 голосов
/ 23 февраля 2011

Как вы сказали, unpack("%16W*", $string) дает вам целое число.Чтобы преобразовать целое число в шестнадцатеричное, используйте sprintf :

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

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

Если вы хотите использовать шестнадцатеричные цифры в верхнем регистре, используйте %X вместо %x (или %04X в этомcase).

Или вы можете пойти другим путем и преобразовать свою шестнадцатеричную контрольную сумму в целое число, используя hex :

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
0 голосов
/ 22 февраля 2011

Попробуйте unpack("b*',$string).

См. Страницу руководства pack для синтаксиса.

...