潇潇雨雨
对于范围内的ASCII字符[ -~]在Python 2上:>>> import binascii>>> bin(int(binascii.hexlify('hello'), 16))'0b110100001100101011011000110110001101111'相反:>>> n = int('0b110100001100101011011000110110001101111', 2)>>> binascii.unhexlify('%x' % n)'hello'在Python3.2+中:>>> bin(int.from_bytes('hello'.encode(), 'big'))'0b110100001100101011011000110110001101111'相反:>>> n = int('0b110100001100101011011000110110001101111', 2)>>> n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()'hello'若要支持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 '\0'下面是单源Python 2/3兼容版本:import binasciidef 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)))例>>> text_to_bits('hello')'0110100001100101011011000110110001101111'
>>> text_from_bits('110100001100101011011000110110001101111') == u'hello'True