質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

Q&A

解決済

3回答

905閲覧

b'a'が97の理由は?

pokemonta

総合スコア170

ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

0グッド

0クリップ

投稿2020/04/04 05:37

編集2020/04/04 13:00

bytes型とは、0~255で表現されるものだと思っています。
なぜaを指定できるのでしょうか?
→★ASCIIの範囲まで指定できることは理解できました。
それ以降は、エスケープをつけることで可能との認識。

97は、以下のリンクからこのように解釈しました。
byteのaは、asciiコード97という理解でよろしいでしょうか?
リンク内容

このaは、16進数ですか?混乱してきました。
→★16進ではないことは理解できました。

そもそも以下のような構文は何をするためのものでしょうか?
value1 = b'a
バイナリaはasciiコードの何番かを出力するためのものでしょうか
→★バイナリのaでっせって宣言しているだけで
あとは解釈側の判断ということ?

''''''''''''''''''''
97は、97byteのオブジェクトを作るという意味でしょうか
じゃぁ b'abc'は、97,98,99バイトの計3つのオブジェクトを作るということでしょうか
→★これはその通りだと思う。
'''''''''''''''''''
value1 = b'a'
print(value1)

これを実行したら97が出力されるかと思ったら
b'a'のままでした。なにこれ。。
→いまいち用途がわからない。

~~~~~~~~~~~
頂いた情報から以下のようにまとめてみました。
アスキーのaかバイナリのaかは、見分けがつくようになりましたが
以下のように10進数も16進数も同じなので、何が便利なのでしょうか?

ASCIIとbytesで解釈が違うケースは具体的にどのようなものがありますでしょうか?
バイト数が違うケースがイメージできておりません。
|10進数|16進数


ASCII 'a' |97 |0x61
Bytes b'a' |97 |0x61
ASCII 'LF' |10 |0x0a
Bytes b'LF' |10 |0x0a
ASCII '61' |5449 |0x3631
Bytes b'61' |5449 |0x3631

^^^^^^^^^^^^^^^^^^^^^
知識人のどなたかへ
これまでの散らかった疑問点を整理して頂けないでしょうか

bの有無でasciiかbyteかを識別できる。
それをプログラムによって扱いを変えることができる。
組み方次第。この組み方次第がイメージできていないですが。。
ascii→byteに変換することでバイト数削減に繋げれると思っていましたが
これもいまいち反応が悪いようで正しいかよくわかっていません。
b'リテラル' ←0-127まで指定可能(asciiの範囲)
それ以降~255まではエスケープで表示可能・具体的にイメージできていません。
128以降は、unicode?
さらにそれ以上は、encodeを使う。例えば『あ』等

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/04/04 05:38

言語は何ですか?
pokemonta

2020/04/04 05:54

pythonです。言語によって文字コードは変わるんでしょうか
maisumakun

2020/04/04 05:56

> 言語によって文字コードは変わるんでしょうか C言語ではほとんど文字コードに仮定をしていません。EBCDICという、ASCIIと全く別系統のコードで動かすことも可能です。
guest

回答3

0

ベストアンサー

このaは、16進数ですか?

違います。b'abc'のかたちは、バイト列リテラルといいます(Python公式)。中身は(ASCII外はエスケープして書く必要がありますが)文字として認識されます。

投稿2020/04/04 07:02

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pokemonta

2020/04/04 07:39

value1 = b'a' print(value1) を実行したらb'a'が出力されて、これの便利がよくわかりませんでした。 バイトリテラルを指定して、バイトオブジェクトが作られるだけでしょうか
pokemonta

2020/04/04 07:42

Ascii『a』を指定するとb'a' 10進数97が返ってきて何となく使えそうだな~と思うんですが b'a'が返ってくるので便利さがよくわかりません
maisumakun

2020/04/04 09:44

> 便利さがよくわかりません わからないのであれば、特に使う必要はありません。バイナリが必要になる操作をしない限り、単なる'a'を使えばいいだけです。
pokemonta

2020/04/04 12:13

b' 'は、Asciiをbyteに変換して軽量化することが目的だと思っています
maisumakun

2020/04/04 12:15

> b' 'は、Asciiをbyteに変換して軽量化することが目的だと思っています 軽量化はされませんので、そういう目的で使うものではありません。
maisumakun

2020/04/04 12:16

> ASCIIとbytesで解釈が違うケースは具体的にどのようなものがありますでしょうか? バイト数が違うケースがイメージできておりません。 バイト数は違いません。「これはバイト列であって、普通の文字列として処理してはいけない」というマーク付をしているだけです。
guest

0

Pythonであれば、b'a'b'abc'は、'a''abc'とほぼ同じです。

同じデータを、バイト列とみるか、文字列とみるかの違いです。

b'a''a'は、中身が1バイトのオブジェクトで、値が十進表現で97、十六進表現で0x61です。

これを実行したら97が出力されるかと思ったら

データは型を持っていますので、型に応じた解釈をされて表示されます。
異なる解釈で表示したければ、型の変換が必要です。

投稿2020/04/04 07:34

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pokemonta

2020/04/04 07:48

bの有無でバイト列か文字列かの判断かはできるようになりました。 以下のaは、b'a'ですか?それとも'a'ですか? 10進数 16進数 2進数 文字 97 61 01100001   a 当てはまらない他方は、どうゆう値になるのでしょうか?
maisumakun

2020/04/04 07:50

> 以下のaは、b'a'ですか?それとも'a'ですか? どちらもです。
otn

2020/04/04 09:41

> 以下のaは、b'a'ですか?それとも'a'ですか? 型情報が無いため、何とも言えません。 数値か、文字列か、バイト列か、それ以外か。
pokemonta

2020/04/04 12:11

>型情報が無いため、何とも言えません。 >数値か、文字列か、バイト列か、それ以外か。 型の指定とは、bの有無のことでしょうか? a - 61のaは、文字列の認識です。バイト列の場合 どう対応するのかイメージがつきません
otn

2020/04/04 12:27

いやそうじゃなくて、 > 97 61 01100001   a や > a - 61 は、Pythonのコードじゃないですよね。 Pythonのコードで書かないと、どの型かは決まりません。
pokemonta

2020/04/04 12:36

pythonのコードで10進数を採用するか2進数を採用するか 解釈側によって変わるでしょってことですね
otn

2020/04/04 12:38

コメントの意味がよくわかりません。 繰り返しますが、 Pythonのコードで書かないと、どの型かは決まりません。
guest

0

リンク先は文字コードの表でしょうか?

Letter a

小文字の 'a'の文字コードは、10進数で、97 となり、2進数の表記では、01100001 という事ですね。

value1 = b'a

これは、何の言語でしょうか? C言語とか、その系譜ではなさそうですね。
雰囲気的には、16進数の A (10進の 10) を意味する気がしますが、言語が分からないと分かりません。

投稿2020/04/04 05:52

pepperleaf

総合スコア6385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pokemonta

2020/04/04 05:58

変換ツールにかけると 16進(a) → 10進(10)になり、97にはなりません
pokemonta

2020/04/04 06:01

ascii(a) → 10進(97)だとして なぜバイナリとして表現しているのかもいまいちピンときません b'a'
pepperleaf

2020/04/04 09:41

> 16進(a) これは、数字としての 'a' 97になるのは、文字としての 'a'
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問