了解字符串到二进制函数

时间:2019-11-21 20:30:42

标签: python-3.x

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' ##<-------|

如果有人可以向我解释这两个功能(我从str更改为二进制并反转),我很想知道,但我不明白他在两个函数的secound和3rd行中都做了什么/ p>

1 个答案:

答案 0 :(得分:0)

让我们对其进行分析:

  • 文本 .encode(编码,错误):此函数将文本编码为字节数据类型
  • int.from_bytes( ... ,'big')):从上方获取输入并转换为int数据类型; “大”表示被叮咬 在字节数据中
  • bin( ... :将整数转换为二进制数
  • [2:] :用于删除前者开头的“ 0b”

然后在返回中:

  • len(bits):显示 bits
  • 的长度
  • 8 *((len(bits)+ 7)// 8):将始终给出最接近的8的倍数 到
  • bits.zfill(...):将从左侧开始用零填充位,以使整个字符串的长度为8的倍数。

在第二个功能中:

  • int(bits,2):将带有二进制的字符串转换为整数数据类型; 2表示bits变量包含一个二进制
  • n.bit_length():返回存储给定数字所需的位数
  • (n.bit_length()+ 7)// 8 :返回存储该数字所需的字节数
  • n.to_bytes():将整数转换为解码函数接受的字节格式

  • decode():将字节符号转换为字符串(指定为“ utf-8”)

理解这一系列数据操作的最好方法是,如果您一个一个地使用所有给定的函数。这样肯定会有意义。