printfを使用したBASHの文字への整数ASCII値


84

文字から値への機能:

$ printf "%d\n" \'A
65
$ 

2つの質問があります。最初の質問が最も重要です。

  • 65を取得してAに変換するにはどうすればよいですか?
  • \ 'Aは、printfを使用してASCII文字をその値に変換します。シンタックスある特定printfのか、それはBASHのどこにも使用されていますか?(このような小さな文字列はGoogleにとって難しいものです。)
bash  ascii  printf 

Windowsでは、ALT + 65を使用してASCII文字を出力します-残念ながら、Unix / bashでは機能しません;)
schnaader 2009年

2
@schnaaderですが、スクリプトを作成することはできません。
ctrl-alt-delor 2015

2
@richard:えーと、簡単でも実用的でもありませんが、WindowsまたはMS-DOSを実行しているVMを「ただ」起動し、「echo」、ALT、6、5、 "> mysharedfolder \ file.txt"を送信することができます。キーストロークを実行し、VM共有フォルダーからfile.txtを読み取ります。
schnaader 2015

2
@schnaaderワインを使ってそれを行うことができますか?
エモリー2016

回答:


69

1行

printf "\x$(printf %x 65)"

2行

set $(printf %x 65)
printf "\x$1"

使用してもかまわない方はこちら awk

awk 'BEGIN{printf "%c", 65}'

3
同様に機能するはずですprintf "$(printf '\\x%02x' $char)"
0andriy 2015

31

これは機能します(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


9

1つのオプションは、16進表記または8進表記を使用して、関心のある文字を直接入力することです。

printf "\x41\n"
printf "\101\n"

8

この種の変換には、perlを使用します。

perl -e 'printf "%c\n", 65;'

2
またはperlで、chr(65)、 "\ n"を出力します。これをたくさん行う場合はperlが良い選択かもしれませんが、シェルのprintfを使用して、数値を\ 0エスケープシーケンスに入ることができるものに変換することは問題なく機能します。printfで\ uサポートが必要なため、Unicodeではより複雑になります。
ピーターコーデス2013年

残念ながら、Perlは忘れられた言語です。Pythonは、現在ほとんどすべてのLinuxマシンに搭載されています。さらに、質問はShell-Bashに関するものであり、他のプラットフォームに関するものではありません。
s3n 03

7

文字のASCII値を保存したい場合:(これはBASHで行い、機能しました)

{
char="A"

testing=$( printf "%d" "'${char}" )

echo $testing}

出力:65


これはうまくいきました、ありがとう。型付き文字から整数(ASCIIコード)を取得したかったのです。スクリプトを作成しました:{read -n 1 c; echo $(printf "%d" "'$ {c}")}
Phaedrus 2014年


3

65を(8進数で)Aに変換するさらに別の方法は次のとおりです。

help printf  # in Bash
man bash | less -Ip '^[[:blank:]]*printf'

printf "%d\n" '"A'
printf "%d\n" "'A"

printf '%b\n' "$(printf '\%03o' 65)"

使用を検索するman bash\'は(この場合は無駄ですが):

man bash | less -Ip "\\\'"  # press <n> to go through the matches


1

これにより、基本的なbashセットアップのすべての「印刷可能な」文字が印刷されます。

printf '%b\n' $(printf '\\%03o' {30..127})

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.