Как распечатать шестнадцатеричное содержимое одного текста, используя 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.

Другие вопросы по тегам