python ascii函数二进制_Python-将二进制转换为ASCII,反之亦然

小编典典

对于[ -~]Python 2 范围内的ASCII字符:

>>> import binascii

>>> bin(int(binascii.hexlify('hello'), 16))

'0b110100001100101011011000110110001101111'

相反:

>>> n = int('0b110100001100101011011000110110001101111', 2)

>>> binascii.unhexlify('%x' % n)

'hello'

在Python 3.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中支持所有Unicode字符3:

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 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)))

>>> text_to_bits('hello')

'0110100001100101011011000110110001101111'

>>> text_from_bits('110100001100101011011000110110001101111') == u'hello'

True

2020-02-14

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值