Unixシェルで(コマンドなしで)ASCIIコード(たとえば、または-
など_
)を16進表現に変換したい(例:=>)。.
bc
-
%2d
どんなアイデアがありますか?
答え1
printf
C関数をシミュレートするツールは通常存在します/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
xxd
vim-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進整数にフォーマットすることを意味します。