Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文字列をバイナリ(2進数)に変換する方法をわかりやすく解説

Pythonで文字列をバイナリに変換する基本の考え方

Pythonで文字列をバイナリ(2進数)表現に変換するには、文字列内の各文字を1つずつ取り出し、それぞれを2進数へ変換したうえで、結果をひとつの文字列として連結します。各文字の文字コードは ord() 関数で取得でき、format() 関数に「b」フォーマット指定子を渡すことで、簡単に2進数形式へ整形できます。

format() と ord() を使った変換方法

最もシンプルなのが、format(ord(x), 'b') を使って各文字 x を2進数の文字列に変換する方法です。次の例では、文字列 "hello world" の各文字をスペース区切りのバイナリ表現に変換しています。

>>> st = "hello world"
>>> ' '.join(format(ord(x), 'b') for x in st)
'1101000 1100101 1101100 1101100 1101111 100000 1110111 1101111 1110010 1101100 1100100'

このコードでは、ジェネレータ式で各文字を順番に処理し、join() メソッドでスペースを挟みながら連結しています。たとえば先頭の文字「h」はASCIIコードで104に相当し、これを2進数にすると「1101000」になります。

bytearray() と bin() を組み合わせる方法

もうひとつの方法として、bytearray() で文字列をバイト列に変換し、それを bin() 関数にマッピングするやり方もあります。こちらは各文字のバイナリ値をリスト形式でまとめて取得できるのが特徴です。

>>> st = "hello world"
>>> [bin(b) for b in bytearray(st.encode())]
['0b1101000', '0b1100101', '0b1101100', '0b1101100', '0b1101111', '0b100000', '0b1110111', '0b1101111', '0b1110010', '0b1101100', '0b1100100']

bin() 関数の出力には「0b」という接頭辞が付く点に注意してください。接頭辞が不要な場合は、bin(b)[2:] のようにスライスを使えば除去できます。また、Python 3では文字列をそのまま bytearray() に渡せないため、encode() メソッドでバイト列に変換してから渡す必要があります。

まとめ

文字列をバイナリに変換する場合は、format(ord(x), 'b') で整形しながら join() で連結する方法が可読性に優れておりおすすめです。一方、bytearray()bin() の組み合わせは、各文字のバイナリ値をリストとして扱いたい場面で便利です。目的に応じて両者を使い分けるとよいでしょう。

  1. Pythonでリストの文字列表現をリストに変換する方法【ast.literal_evalの使い方】

    Pythonでは、[apple, orange, banana] のように文字列として表現されたリストを、実際のリストオブジェクトへ変換したい場面があります。そんなときに便利なのが、標準ライブラリの ast.literal_eval() です。 ast.literal_eval()とは ast.literal_eval() は、文字列をPythonの式として安全に評価するための関数です。任意のコードを実行してしまう危険性がある eval() と異なり、評価できるのは文字列・数値・タプル・リスト・辞書・ブール値(True / False)、そして None といったPythonのリテラル構造のみ

  2. Pythonで文字列を逆順にする方法|スライスとreversed()の使い方を解説

    Pythonでは、文字列スライスやrange演算子を活用することで、文字列を簡単に逆順(反転)にすることができます。この記事では、代表的な2つの方法をわかりやすく解説します。 方法1:スライス記法 [::-1] を使う(推奨・高速) 最もシンプルで一般的なのが、スライス記法を使う方法です。ステップに -1 を指定するだけで、文字列を後ろから前へ一文字ずつ取り出せます。 >>> Hello[::-1] olleH >>> Halloween[::-1] neewollaH スライスの仕組み 角括弧 [] の中には、コロン「:」で区切った3つの値を指定できます