ASCIIコード(-
または_
または.
など)]をUnixシェルの16進表記(bc
なし)に変換したいコマンド)、例:-
=> %2d
。
何か案は?
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
試してください od :
$ echo -n "-_。" | od -A n -t x1
2d 5f 2e
-A n
はオフセットを印刷しないことを意味し、-t x1
は、入力のタイプが1バイトの16進整数であることを意味します。
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