- 摘要: 你可以在Python中使用将一个字符串转换为二进制。
- bytearray() + bin()
- map() + bin() + bytearray()
- join() + format() + bytearray()
- join() + format() + ord()
- binascii.hexlify()
问题:如何在Python中把一个给定的字符串转换成二进制等价物?
例子。当你将一个字符串转换为二进制时,它要么产生一个由二进制值组成的列表,代表给定字符串的原始字符,要么代表整个字符串的整个二进制值。
Input:
given_string = "xyz"
Expected output:
['0b1111000', '0b1111001', '0b1111010']
or
1111000 1111001 1111010
让我们深入研究众多的方法,这些方法将帮助我们得出所需的输出。我们将深入研究用于解决关键任务问题的每个函数。因此,不再拖延,让游戏开始吧。
相关阅读。将字节转换为字符串
方法1:使用bytearray+bin
方法。
- 通过调用
bytearray(string, encoding),将给定的字符串转换为字节数组对象。bytearray对象将字符串的字符表示为字节。 - 使用for-loop遍历每个字节,并在每个字节上使用
bin方法,将其转换为二进制表示。 - 在另一个列表中追加结果的二进制表示法。
代码。
word = "xyz"
# convert string to bytearray
byte_arr = bytearray(word, 'utf-8')
res = []
for byte in byte_arr:
binary_rep = bin(byte) # convert to binary representation
res.append(binary_rep) # add to list
print(res)
输出。
['0b1111000', '0b1111001', '0b1111010']
去掉 "0b "前缀。
上述方法导致创建的二进制值的前缀是 "0b",这表明它是一个用二进制系统而不是十进制系统表示的数字。由于你已经知道输出是一个二进制数,因此你可以通过以下方法消除前缀 切片的二进制数,并从二进制字符串的索引2开始。
你可以进一步使用join 方法将所有的二进制字符串连接在一起,一次性得到整个字符串的二进制表示。
代码。
word = "xyz"
# convert string to bytearray
byte_arr = bytearray(word, 'utf-8')
res = []
for byte in byte_arr:
binary_rep = bin(byte) # convert to binary representation
res.append(binary_rep[2:]) # remove prefix "0b" and add to list
print(' '.join(res)) # join all the binaries of res list
输出。
1111000 1111001 1111010
读者文摘
Python 内置的bytearray() 方法接收一个可迭代的数据,如 0 到 256 之间的整数列表,将它们转换为00000000 和11111111 之间的字节,并返回一个新的字节数组作为一个[bytearray](https://docs.python.org/3/library/stdtypes.html#bytearray)类。
Python 的内置**bin(integer)**函数需要一个整数参数,并返回一个前缀为"0b" 的二进制字符串。如果你在一个非整数的x 上调用bin(x) ,它必须定义__index__() 方法,返回一个与x 相关的整数。否则,它将抛出一个TypeError: object cannot be interpreted as an integer 。
推荐阅读。Python打印没有'0b'的二进制
方法2:使用map()+bin()+bytearray()
方法。下 面的解决方案是一个单行本。让我们来分解并尝试理解将使用的单线程的每一段。
- 使用
map函数将byte对象传递给bin函数。bytearray(string, encoding)将字符串转换为一个字节对象。 - 当字节对象中的每个字节被传递给bin函数时,它将它们转换为它们的二进制等价物。
- 使用
list构造函数将map方法返回的对象转换为一个列表。 - 为了生成一个代表整个字符串的二进制字符串,使用一个**列表理解**,这样。
- 表达式 为 x[2:] ,表示从索引2开始的二进制字符串,以避免二进制前缀 "0b"。
- 上下文变量,即x代表我们从map对象中生成的列表中的每个项目/二进制值。
- 最后,使用
' '.join方法,在上面的列表上一次性获得整个字符串的二进制表示法的理解。
代码。
word = "xyz"
res = ' '.join([x[2:] for x in list(map(bin, bytearray(word, 'utf-8')))])
print(res)
输出。
1111000 1111001 1111010
读者文摘
map() 函数通过对每个迭代表的第i个元素应用一个 "转化器函数 "将一个或多个迭代表转化为一个新的迭代表。参数是转化器函数对象和一个或多个迭代变量。如果你传递n个迭代变量作为参数,转化器函数必须是一个n次方函数,接受n输入参数。返回值是一个可迭代的地图对象,其中包括已转换的元素,也可能包括已聚合的元素。
方法3:使用join+format+bytearray
方法。
- 使用
bytearray函数将给定的字符串转换为字节对象,使字节对象将字符串的每个字符表示为字节。 - 然后调用
format(x, 'b')方法将字节对象转换为二进制表示,然后使用join方法将每个转换的字符连接起来,形成一个字符串。
代码。
word = "xyz"
res = ' '.join(format(x, 'b') for x in bytearray(word, 'utf-8'))
print(res)
输出。
1111000 1111001 1111010
读者文摘
Python 内置的format(value, spec) 函数将一种格式的输入转换为你定义的另一种格式的输出。具体来说,它将格式指定器spec 应用于参数value 并返回格式化的表示value 。例如,format(42, 'f') 返回字符串表示'42.000000' 。
**str.join(iterable)**将一个iterable 中的元素连接起来。其结果是一个字符串,其中迭代器中的每个元素都被 "粘在一起",它被称为分隔符的字符串。
方法4:使用join()+format()+ord()
方法。这 里的想法与上面解释的方法很相似。唯一不同的是,在这种情况下,使用ord函数代替bytearray,将给定字符串的字符转换成Unicode表示。
代码。
word = "xyz"
res = ' '.join(format(ord(x), 'b') for x in word)
print(res)
输出。
1111000 1111001 1111010
读者文摘
Python**ord()** 函数将一个字符(=长度为1的字符串)作为输入,并返回这个字符的Unicode编号。例如,ord('a') 返回 Unicode 数字97 。ord() 的反函数是chr() 函数,所以chr(ord('a')) 返回原始字符'a' 。
方法5:使用hexlify
方法。
- 调用
bytes(word, 'utf-8')函数,将给定的字符串转换为字节对象。 - 使用
binary.hexlify,返回二进制数据的十六进制表示,然后通过指定16为基数将其转换为一个整数对象。 - 最后,用
bin函数将其转换为二进制表示法。
代码。
import binascii
word = "xyz"
w = bytes(word, 'utf-8')
res = bin(int(binascii.hexlify(w),16))
print(res[2:])
输出。
11110000111100101111010
结论
吁!这的确是一个全面的旅程。这的确是一个全面的旅程,我们学到了多达五种不同的方法来征服给定的问题。请随意尝试,并使用适合你的方法。