昨日の続きでPython3で通信できるようにやってみた。まだPython2系が無くなったわけではないし、緊急性はなかったが、動作しないのを見たらどうしても直してみたくなった。ちなみにPythonバージョンは3.6.4。
実行してまず、実行エラーで引っかかったのはprint関数。Python2 ・・・ print ‘文字列’
これはすぐに分かった。
Python3 ・・・ print(‘文字列’)
もう一つ大きなものは、文字列とバイト列の関係だ。変わったのはわかってたので、単純にbytes関数で変換したら、エラーは消えたが全く返答が帰ってこない。
わけが分からずに使っていたが、bytes()関数は大きさを指定してbytesオブジェクトを作る関数だったようだ。
bytes(10)
b’\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00’
Python3は文字列はデフォルトでUnicodeになって、その代りbytes型ができた。
下記のような感じである
PYTHON3 | PYTHON2 | |
byte列 | bytes (b”) | str (”) |
通常の文字列 | str (”) | str (”) |
要するに文字列をbyte列に直せば良い。
変更箇所は下記の通り
まずは暗号化関数
整数をからbyte列に変換するにはto_bytes()関数を使用する。動作は下記の通り。
i=ord(‘a’)
i.to_bytes(1,’big’)
b’a’
Python3.2から使用可能。標準関数なのでimportする必要はない。
これがわかるまで結構時間がかかってしまった。
次に復号化
受信する時に、byte列で入ってくるので、Python2のようにord() 関数で整数に戻す必要がないので、記入としては減る方向になった。
無事にPython2のファイルと同じことができた。