Python中如何实现比特转字节?及字符转比特后的还原方法咨询
在Python中处理比特与字节转换、比特字符串还原字符的方法
一、比特(bits)转字节(bytes)
首先得明确:1字节=8比特,所以转换的核心是把比特数据按8位一组处理,不足8位的通常要在前面补零(因为二进制数的高位在前)。这里分两种常见场景:
场景1:从比特字符串转字节
比如你有一个像'10000011000010'这样的比特字符串,步骤如下:
- 先补零让字符串长度是8的倍数(确保每个字节对应完整的8位)
- 按每8位分割成子串
- 把每个子串转成整数(指定进制为2),再组合成字节对象
示例代码:
bit_str = '10000011000010' # 计算需要补的零的数量,让总长度是8的倍数 padding_length = (8 - len(bit_str) % 8) % 8 # 在字符串左侧补零 padded_bit_str = bit_str.zfill(len(bit_str) + padding_length) # 按8位分组,逐个转成整数再生成字节 bytes_data = bytes(int(padded_bit_str[i:i+8], 2) for i in range(0, len(padded_bit_str), 8)) print(bytes_data) # 输出 b'A\x02'
场景2:从整数形式的比特集合转字节
如果你的比特是用[0,1]这样的整数列表存储的,可以先拼接成字符串再按上面的方法处理:
bit_list = [1,0,0,0,0,0,1,1,0,0,0,0,1,0] bit_str = ''.join(str(bit) for bit in bit_list) # 后续补零、分组转字节的步骤和场景1一致
二、还原format(ord(char), 'b')得到的比特字符串为字符
你用format(ord(char), 'b')得到的是字符ASCII码的二进制字符串(无前导零),比如字符'A'会得到'1000001'(对应十进制65)。还原起来很简单,只需要两步:
- 把二进制字符串转成十进制整数(用
int(bit_str, 2),第二个参数指定进制为2) - 用
chr()把整数转回字符
直接上示例:
# 假设你得到的比特字符串是从'A'转换来的 bit_str = '1000001' # 还原步骤 original_char = chr(int(bit_str, 2)) print(original_char) # 输出 'A'
如果是多个字符拼接的比特字符串(比如把'A'和'B'的比特串连起来变成'10000011000010'),记得先补零到8的倍数再分组还原:
multi_bit_str = '10000011000010' # 补零到8的倍数 padding_length = (8 - len(multi_bit_str) % 8) % 8 padded_bit_str = multi_bit_str.zfill(len(multi_bit_str) + padding_length) # 按8位分组逐个还原 original_chars = ''.join(chr(int(padded_bit_str[i:i+8], 2)) for i in range(0, len(padded_bit_str), 8)) print(original_chars)
小提示:如果当初转换字符时用format(ord(char), '08b')(强制补零到8位),后续还原就不需要额外补零,直接按8位分割即可,会更省心。
内容的提问来源于stack exchange,提问作者BlockCoder
相关产品推荐
相关产品推荐

