UNIXシェルスクリプトでASCIIコードを16進数に変換する

UNIXシェルスクリプトでASCIIコードを16進数に変換する

Unixシェルで(コマンドなしで)ASCIIコード(たとえば、または-など_)を16進表現に変換したい(例:=>)。.bc-%2d

どんなアイデアがありますか?

答え1

printfC関数をシミュレートするツールは通常存在します/usr/bin/printfが、多くのシェルでもそれに対する組み込み機能を実装しています。これを使用して%02x文字の16進表現を取得できますが、渡す文字列に一重引用符(編集する:最初に一重引用符を追加するだけで十分であることがわかりました。):

printf "%%%02x\n" "'-"   # Outputs %2d

便宜上、次のようにシェル関数を作成できます。

function hex() {
    printf "%%%02x\n" "'$1"
}

hex -   # Outputs %2d
hex _   # Outputs %5f
hex .   # Outputs %2e

答え2

xxdvim-commonパッケージの一部として提供される16進ダンプユーティリティ。
このユーティリティには、連続した「一般/PostScript」16進ダンプスタイルを出力する便利なオプションがあります。これは-p大文字の16進数を出力する...に簡単に戻すことができます。-r-u

$ echo -n "M" |xxd -p    # 1 ASCII char= 1 UTF-8 byte; Unicode Codepoint: U+0041
4d

$ echo -n "〶" |xxd -p -u # 1 CJK char= 3 UTF-8 bytes; Unicode Codepoint: U+3036  
E380B6

$ echo -n "Dump a string" |xxd -p -u  
44756D70206120737472696E67

$ echo -n "Dump and Revert" |xxd -p |xxd -r  
Dump and Revert

答え3

努力するOD:

$ echo -n "-_." | od -A n -t x1
2d 5f 2e

-A nオフセットを印刷しないことを示します。-t x1これは、出力を1バイトの16進整数にフォーマットすることを意味します。

関連情報