В Perl, pack
и unpack
имеют два шаблона для преобразования байтов в / из шестнадцатеричного:
h
Шестнадцатеричная строка (младший nybble первый).H
Шестнадцатеричная строка (сначала старший nybble).
Лучше всего это пояснить на примере:
use 5.010; # so I can use say
my $buf = "\x12\x34\x56\x78";
say unpack('H*', $buf); # prints 12345678
say unpack('h*', $buf); # prints 21436587
Как видите, H
- это то, что обычно имеют в виду люди когда они думают о преобразовании байтов в / из шестнадцатеричного. Так в чем же цель h
? Ларри, должно быть, подумал, что кто-то может его использовать, иначе он бы не стал его включать.
Вы можете привести реальный пример, где вы? d действительно хотите использовать h
вместо H
с pack
или unpack
? Я ищу конкретный пример; если вы знаете машину, которая организовывала свои байты таким образом, что это было, и можете ли вы дать ссылку на какую-либо документацию по ней?
Я могу вспомнить примеры, где вы могли бы использовать h
, например, сериализацию некоторых данных, когда вам все равно, что это за формат, при условии, что вы можете прочитать его обратно, но H
будет не менее полезным для этого. Я ищу пример, где h
более полезнее, чем H
.