ゴリラと学ぶ「二進数をPythonでデコード」
このまえ、二進数を「ウ」と「ホ」にかえた、ゴリ進数🦍についてきめたことがあったウホ。
ゴリ進数は、数字をあらわすにはそれだけでいいけど、これをどんどんおうようしていきたいウホ。
じっさい、ほとんど二進数✌のようなものだから、二進数にできることはゴリ進数にもできるとおもうウホ。
きょうは、ゴリ進数🦍をつかった、ゴリラ🦍やニンゲン👫にとって、いみのあることば📄のやりとりのほうほうをかんがえてみるウホ。
そして、Python🐍でじっそうしてみるウホ。
もんだい
あるゴリラ🦍が、ゴリに対して、「ウウウウホホホホウホホウウウウウウホホウホホウホウホウホウホホウ」といったウホ。
ゴリは、そのゴリラがゴリ進数で話していたことがわかったウホ。
すうじだと「4036989609」だから、その数字をききかえしたウホ。でも、ゴリラはだまって首を横にふったウホ。
ゴリラのようすをみるに、どうやらただの数字をはなしているわけじゃないことがわかったウホ。
ゴリラは、いったいなにをゴリにつたえたかったウホ?
🦍🦍🦍🦍🦍🦍🦍🦍🦍🦍🦍🦍
つくったもの
ただの数字じゃないということは、なにか意味のあることばをはなしていることになるウホ。
こんなときは、この二進数をデコードするウホ!
デコードのくわしいせつめいはWikipediaにゆずるとして、すごくざっくりというと、
コンピュータのためのなんかデジタルなしんごうを、ニンゲンやゴリラにいみのわかることばになおすウホ。
しゅどうでやるとめんどくさいから、Pythonでやってみるウホ。
どうさかんきょう:Google coraboratory (2020/01/24 python3)
コードはほとんど、Kite - How to convert binary string to and from ASCII text in Pythonにあるコードをさんこうにしたウホ。
gorinary = 'ウウウウホホホホウホホウウウウウウホホウホホウホウホウホウホホウ'
gori2byte = int(gorinary.replace('ウ', '1').replace('ホ', '0'), 2)
byte2num = (gori2byte.bit_length() + 7) // 8
byte = gori2byte.to_bytes(byte2num, byteorder='big')
text = byte.decode("utf-8")
print(text)
まず、ゴリラの言ったウホ進数を、変数のgorinaryとしていれたウホ。
つぎに、int()でゴリ進数を数字(4036989609)にかえたウホ。
オプションに2をつかうことで、二進数であることを示したウホ。
このとき、replaceで「ウ、ホ」をそれぞれ「1, 0」にかえるのもやってるウホ。
つぎに、byte2numでバイトの長さ?に変換するウホ。
もうしわけないけど、ここはあんまり理解してないウホ。
そのあとのto_bytes関数で、「\xe8\x03」みたいなバイト列をつくるウホ。
「byteorder = ‘big’」という、バイト列を上からじゅんによむエンディアンにするウホ。ここもあんまり理解していないからとばすウホ。
そして、さいごにutf-8でデコードするウホ!
これをやると、出力はつぎのようになるウホ。
💩
なるほど、なるほど!ゴリラはゴリにまきまきチョコパンについてはなしたかったウホ!なっとくいったウホ。
…
ゴリラのいいたいことがわかったから、ゴリもお返しに「ありがとうウホ」といいたいウホ。
こんなときは、ゴリラ日本語をエンコードするウホ。
エンコードは、さっきのデコードの逆で、ゴリラやニンゲンの言葉をゴリ進数にすることをいうウホ。
言いたいことばをいうためのコードも、さっきとおなじようによういしたウホ。
input_text = "ありがとうウホ"
byte = input_text.encode('utf-8')
byte2int = int.from_bytes(byte, byteorder='big')
int2string = str(bin(byte2int)).replace('0b', '').replace('1', 'ウ').replace('0', 'ホ')
print(int2string)
やることはぎゃくになるウホ。「ありがとうウホ」をエンコードして、それをゴリ進数にかえるウホ。
出力は次のようになるウホ。
ウウウホホホウウウホホホホホホウウホホホホホウホウウウホホホウウウホホホホホウホウホホホウホウホウウウホホホウウウホホホホホホウウホホホウウホホウウウホホホウウウホホホホホホウウホウホウホホホウウウホホホウウウホホホホホホウウホホホホウウホウウウホホホウウウホホホホホウホウホウホホウウホウウウホホホウウウホホホホホウウウホホウウホウウ
**「ウウウホホホウウウホホホホホホウウホホホホホウホウウウホホホウウウホホホホホウホウホホホウホウホウウウホホホウウウホホホホホホウウホホホウウホホウウウホホホウウウホホホホホホウウホウホウホホホウウウホホホウウウホホホホホホウウホホホホウウホウウウホホホウウウホホホホホウホウホウホホウウホウウウホホホウウウホホホホホウウウホホウウホウウ」**をさっきのデコードするコードをつかうことで、「ありがとう」ということがかくにんできるウホ。
エンコードすることで、ウとホでありがとうがつたえられたウホ。
こたえ:うえにかいたとおり
ウとホだけしかいえないと、なかなか言いたいことをいうのもひとくろうウホ。
ニンゲン👫やゴリのように、いろいろな発音👄ができるようになると、たくさんの文字やことば📄がいえて便利ウホ。
ゴリ進数のほかにも、いろいろなひょうげんができるとうれしい😊ウホ。