一言で書けば「そういうものです、ちゃんとバイナリデータになっています」ということになります。
そもそもbytes型(b''で表わされる)は、バイナリデータの並びですが、基本的にはバイト(8ビット)の並びとして保持されています。そして、1バイトは16進数2つで表わすことができます。
一方、文字の方もバイト列として表わされています。特にASCIIコードは全ての文字が1バイトで表現されています。(UTF-8はもっと沢山のバイトを使います)
ようするに、文字列はバイト列として表わされ、バイト列は文字列として扱うことができるのです。 実際、python2での文字列は、このbytes型と同じものでした。
ということで、bytes型のデータはASCII文字列に変換されて表示されるようになっているのです。
ただし、ASCII文字列には、表示できないもの(制御コードなど)がたくさん含まれていますので、そのようなものはしかたなく16進数で表示されているのです。
10進数の31は「US(ユニット区切り)」を表わします。表示できないので、0x1Fになっています。10進数の32はスペースを表わしていますので、そのまま表示されます。同様に0x37なら「7」が、0x4b なら「K」が表示されます。
正しく変換されているかどうかは、ASCIIコード表を見ればわかります。
どうしてもプログラムで表示させたいのであれば、hex()メソッドを使えば、データを「16進数の文字列」に変換することができ、表示することができます。
python
1data = pack('b', 32)
2print(data.hex())
3# 20と表示される
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。