将bytearray转换为类似于bytes的对象

32
在Python 3中,我遇到了错误TypeError: a bytes-like object is required, not 'bytearray' 我有一个字节数组,它看起来像这样:
print(my_ba)     # bytearray(b'}\x0e\x15/ow4|-')

如果我在控制台中输入这个,它就可以工作:
>>> print(base58.b58encode(b'}\x0e\x15/ow4|-'))
2bKmhuGiGP7t8

但是这会导致错误,我找不到如何从bytearray中获取b''字符串:

>>> print(base58.b58encode(my_ba))
TypeError: a bytes-like object is required, not 'bytearray'

我相信这显而易见,但我该如何将bytearray转换为带有b前缀的字符串?


3
请执行以下指令以将其转换:print(base58.b58encode(bytes(my_ba))) - cs95
一个bytearray 一个类似于bytes的对象,但你正在使用的库有一个不必要限制性的实现和一个误导性的错误信息。 - user2357112
@user2357112,顺便提一下,我在stdlib的zlib.decompress方法中遇到了相同的字节参数限制。 - iruvar
2个回答

64

正如Coldspeed在评论中所说,只需将一个bytearray传递给bytes调用:

bytes(my_ba)


2

在字节和字节数组之间进行连接时,它会采用第一个项目的类型,因此将字节数组连接到空字节字符串中也会将其转换为字节。

my_ba = bytearray(b'}\x0e\x15/ow4|-')
my_ba = b"" + my_ba
print(type(my_ba))    # <class 'bytes'>

话虽如此,由于bytearray是类似bytes的类型,所以这个错误可能不会在您使用的库的最新版本中出现。例如,base58接受bytearray作为自1.0.3版本以来


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接