質問: python 3.5.2 WIN32にて (100).to_bytes(1, 'little') の結果が b'd' となってしまいます (128).to_bytes(1, 'little') の場合は b'\x80' となります。 これはなぜでしょうか? また、b'\x64'と表示させる方法はありますでしょうか? よろしくお願いします。
回答: まずPythonのオブジェクトが`print`に渡されたときに、そのオブジェクトの`__str__`メソッドが呼ばれます。 `__str__`が存在しない場合は`__repr__`メソッドが呼ばれます。 `__repr__`メソッドは、Pythonでそのオブジェクトを表現可能なPython式の文字列を返すためのメソッドです。 > > これはなぜでしょうか? > > > `byte`クラスの`__str__`と`__repr__`メソッドが**ASCIIで表現できるコードはASCIIで表現する**といった仕様になっているためです。 なぜ、そんな仕様なのかと言えば、そちらの方が便利だからです。 試しに`repr(b'\x64')`と打ってみて下さい、`"b'd'"`と返ってくるはずです。 > > また、b'\x64'と表示させる方法はありますでしょうか? > > > これについて簡潔にする方法は、私の知る限りありません。 どうしても16進数で表記したいのであれば、reprを頼らずに独自にフォーマットするしかないと思います。 ``` r"\x{:x}".format(100) ```