Как распечатать шестнадцатеричное содержимое одного текста, используя Perl binmode?
Может кто-нибудь сказать мне, как binmode в Perl может использоваться для достижения той же функции, что и следующий однострочный, чтобы распечатать шестнадцатеричные данные одного текста?
$ perl -nle 'print map {sprintf "%02X",ord} split //'
Например, если я введу "abcABC", вывод будет "616263414243".
Пожалуйста, дайте похожий однострочник с помощью binmode.
Благодарю.
3 ответа
Я не понимаю вашу настойчивость в использовании binmode
, но, возможно, это то, что вы имеете в виду?
perl -le 'print map { sprintf q{%02X}, ord } split //, shift' abcABC
выход
616263414243
Вы спрашиваете, как это сделать из программы? Режим ввода по умолчанию такой же, как binmode
в Linux и в Windows единственное отличие состоит в том, что каждый CR LF преобразуется в LF.
Так что вы можете смело писать это.
while (<>) {
chomp;
printf '%02X, $_ for split //;
print "\n";
}
при условии, что символы CR исчезнут, если вы читаете файл Windows, используя версию Perl для Windows
binmode
было бы бесполезно делать то, что вы просили. В настоящее время нет слоев PerlIO, которые преобразуют все выходные байты, но 0A
в их шестнадцатеричном представлении ASCII.