ホームページ > バックエンド開発 > Python チュートリアル > Python でバイナリと ASCII (Unicode を含む) の間で効率的に変換するにはどうすればよいですか?

Python でバイナリと ASCII (Unicode を含む) の間で効率的に変換するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-26 05:35:11
オリジナル
448 人が閲覧しました

How Can I Efficiently Convert Between Binary and ASCII (Including Unicode) in Python?

バイナリから ASCII への変換、およびその逆の変換

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 の機能強化

Python 3.2 以降では、bytes 型がさらに便利になります:

bin(int.from_bytes('hello'.encode(), 'big'))
ログイン後にコピー

逆変換の場合文字列へ:

n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
ログイン後にコピー

Python での Unicode サポート3

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート