Python では、文字列をバイナリ表現に変換するのは簡単です。 reduce()、lambda、ord()、bin() を組み合わせて使用すると、文字列と等価なバイナリを取得できます。ただし、この方法では、手動で文字列を結合し、対応する ASCII 値にマッピングする必要があります。
Python 2 では、binascii モジュールを使用したより簡潔な方法が利用可能です。
import binascii bin(int(binascii.hexlify('hello'), 16))
このメソッドは、元のコードと同様に、[-~] の範囲の ASCII 文字を変換します。文字列に戻す変換の場合:
binascii.unhexlify('%x' % n)
Python 3.2 以降では、bytes 型がさらに便利になります:
bin(int.from_bytes('hello'.encode(), 'big'))
逆変換の場合文字列へ:
n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
Python 3 ですべての Unicode 文字をサポートするには、次の関数を使用できます:
def text_to_bits(text, encoding='utf-8', errors='surrogatepass'): bits = bin(int.from_bytes(text.encode(encoding, errors), 'big'))[2:] return bits.zfill(8 * ((len(bits) + 7) // 8)) def text_from_bits(bits, encoding='utf-8', errors='surrogatepass'): n = int(bits, 2) return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode(encoding, errors) or '<pre class="brush:php;toolbar:false">import binascii def text_to_bits(text, encoding='utf-8', errors='surrogatepass'): bits = bin(int(binascii.hexlify(text.encode(encoding, errors)), 16))[2:] return bits.zfill(8 * ((len(bits) + 7) // 8)) def text_from_bits(bits, encoding='utf-8', errors='surrogatepass'): n = int(bits, 2) return int2bytes(n).decode(encoding, errors) def int2bytes(i): hex_string = '%x' % i n = len(hex_string) return binascii.unhexlify(hex_string.zfill(n + (n & 1)))
Python 2/3 との互換性の場合:
これらを使用関数を使用すると、Python 2 と Python 3 の両方でバイナリ文字列と Unicode 文字列間の変換が簡単になります。
以上がPython でバイナリと ASCII (Unicode を含む) の間で効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。