web-dev-qa-db-ja.com

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

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

何か案は?

7
Olivier DUVAL

C関数をシミュレートするprintfツールがあります。通常は/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
13
Michael Mrozek

試してください od

$ echo -n "-_。" | od -A n -t x1

2d 5f 2e

-A nはオフセットを印刷しないことを意味し、-t x1は、入力のタイプが1バイトの16進整数であることを意味します。

4

xxdは、vim-commonパッケージの一部として出荷される16進ダンプユーティリティです。
これには、連続した「プレーン/ポストスクリプト」16進ダンプスタイルを出力する便利な-pオプションがあります。これは、-r...を介して簡単に元に戻すことができ、-uは上位を出力します-ケースHex-Digits。

$ 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
2
Peter.O