Maison > développement back-end > Tutoriel Python > Comment puis-je convertir efficacement entre binaire et ASCII (y compris Unicode) en Python ?

Comment puis-je convertir efficacement entre binaire et ASCII (y compris Unicode) en Python ?

Susan Sarandon
Libérer: 2024-11-26 05:35:11
original
507 Les gens l'ont consulté

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

Conversion de binaire en ASCII et vice versa

En Python, la conversion d'une chaîne en sa représentation binaire est simple. En utilisant une combinaison de réduire(), lambda, ord() et bin(), l'équivalent binaire d'une chaîne peut être obtenu. Cependant, cette approche nécessite un épissage manuel des chaînes et un mappage avec les valeurs ASCII correspondantes.

Méthodes de conversion plus simples

Pour Python 2, une méthode plus concise est disponible à l'aide du module binascii :

import binascii
bin(int(binascii.hexlify('hello'), 16))
Copier après la connexion

Cette méthode convertit les caractères ASCII dans la plage [-~, similaire au code original. Pour la reconversion en chaîne :

binascii.unhexlify('%x' % n)
Copier après la connexion

Améliorations de Python 3.2

Dans Python 3.2 et versions ultérieures, le type bytes offre une commodité supplémentaire :

bin(int.from_bytes('hello'.encode(), 'big'))
Copier après la connexion

Pour la reconversion à une chaîne :

n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
Copier après la connexion

Prise en charge Unicode en Python 3

Pour prendre en charge tous les caractères Unicode dans Python 3, la fonction suivante peut être utilisée :

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)))
Copier après la connexion
'

Pour la compatibilité Python 2/3 :

Avec ceux-ci fonctions, la conversion entre les chaînes binaires et Unicode devient sans effort dans Python 2 et Python 3.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal