文字から値への機能:
$ printf "%d\n" \'A
65
$
2つの質問があります。最初の質問が最も重要です。
- 65を取得してAに変換するにはどうすればよいですか?
- \ 'Aは、printfを使用してASCII文字をその値に変換します。シンタックスある特定のprintfのか、それはBASHのどこにも使用されていますか?(このような小さな文字列はGoogleにとって難しいものです。)
文字から値への機能:
$ printf "%d\n" \'A
65
$
2つの質問があります。最初の質問が最も重要です。
回答:
1行
printf "\x$(printf %x 65)"
2行
set $(printf %x 65)
printf "\x$1"
使用してもかまわない方はこちら awk
awk 'BEGIN{printf "%c", 65}'
printf "$(printf '\\x%02x' $char)"
これは機能します(8進数の値で):
$ printf '%b' '\101'
A
(一部:7を超えない)シーケンスの場合でも:
$ printf '%b' '\'{101..107}
ABCDEFG
任意の範囲の(10進数の)値を許可する一般的な構成は次のとおりです。
$ printf '%b' $(printf '\\%03o' {65..122})
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
または、文字の16進値を使用できます。
$ printf '%b' $(printf '\\x%x' {65..122})
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
xxdで文字を取り戻すこともできます(16進値を使用):
$ echo "41" | xxd -p -r
A
つまり、一方のアクションはもう一方のアクションの逆です。
$ printf "%x" "'A" | xxd -p -r
A
また、一度に複数の16進値を処理します。
$ echo "41 42 43 44 45 46 47 48 49 4a" | xxd -p -r
ABCDEFGHIJ
またはシーケンス(ここではprintfを使用して16進値を取得します):
$ printf '%x' {65..90} | xxd -r -p
ABCDEFGHIJKLMNOPQRSTUVWXYZ
または、awkを使用することもできます。
$ echo 65 | awk '{printf("%c",$1)}'
A
シーケンスの場合でも:
$ seq 65 90 | awk '{printf("%c",$1)}'
ABCDEFGHIJKLMNOPQRSTUVWXYZ
2番目の質問では、先頭の引用符の構文(\'A
)は次のものに固有のようprintf
です。
先頭の文字が一重引用符または二重引用符である場合、値は、一重引用符または二重引用符に続く文字の基になるコードセットの数値でなければなりません。
http://pubs.opengroup.org/onlinepubs/009695399/utilities/printf.htmlから
この種の変換には、perlを使用します。
perl -e 'printf "%c\n", 65;'
文字のASCII値を保存したい場合:(これはBASHで行い、機能しました)
{
char="A"
testing=$( printf "%d" "'${char}" )
echo $testing}
出力:65
65
16進数に変換すると、次のようになります0x41
。
$ echo -e "\x41"
A
$ printf "\x41"