将 Base64 字符串解码为字节数组

Posted

技术标签:

【中文标题】将 Base64 字符串解码为字节数组【英文标题】:Decode Base64 string to byte array 【发布时间】:2017-01-05 16:45:55 【问题描述】:

我将创建一个 Python 脚本,(或十六进制值数组)。

我的项目的嵌入式方面是一个微控制器,它从原始字节开始创建一个 base64 字符串。该字符串包含一些不可打印的字符(为此我选择 base64 编码)。

在 PC 端,我需要解码 base64 字符串并恢复原始原始字节。

我的脚本使用 python 2.7 和 base64 库:

base64Packet = raw_input('Base64 stream:')

packet = base64.b64decode(base64Packet )

sys.stdout.write("Decoded packet: %s"%packet)

生成的字符串是一个包含一些不可打印字符的字符串。

有没有办法将 base64 字符串解码为字节(或十六进制)值?

提前致谢!

【问题讨论】:

你已经拥有那个字节串了。你期待什么输出,你看到了什么?也许您想在打印时使用%r @MartijnPieters:解码后我会有一个包含每个单字节的 python 列表。 你为什么需要它?你需要操纵字节吗? str 对象已经是一个序列,例如,您可以使用 packet[index] 寻址每个字节,或者使用 for byte in packet: 循环遍历字符串。 您可以仅使用list(packet) 创建列表,生成一个包含 1 个字符(字节)字符串的列表。或者您可能想改用bytearray 对象,但不清楚您想对数据做什么。你还没有给我们你的用例。 那么你想要一个bytearray() 实例;只需使用bytearray(packet)。字节数组是 0-255 范围内的可变整数序列,每个字节一个整数。 【参考方案1】:

您完全可以使用bytearray。 binascii 模块和 struct 可能也有帮助。

import binascii
import struct

binstr=b"thisisunreadablebytes"

encoded=binascii.b2a_base64(binstr)
print encoded
print binascii.a2b_base64(encoded)

ba=bytearray(binstr)
print list(ba)

print binascii.b2a_hex(binstr)
print struct.unpack("21B",binstr)

【讨论】:

谢谢!您能否提供一个使用 bytearray、binascii 和 struct 来解决我的问题的示例?我不是python高手! 添加示例 - 如果您可以更具体地说明哪些输入应该变成我可以扩展的... 感谢您的示例!我使用以下代码行获取整数值列表:stapacketString = list(bytearray(base64.b64decode(base64Packet)))。这是正确的方法吗?对于我的范围,这是可行的。 看起来是正确的——实际上bytearrays 的行为类似于lists(打印除外),所以构造一个list 只需要更漂亮的打印。很高兴我能帮忙:)

以上是关于将 Base64 字符串解码为字节数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中使用字节数组将字符串转换为 base64 编码?

如何将base64位的字节数组转换成图片并显示

如何将图像的字节数组转换为表示 jpg 的 base64 编码字符串

如何快速将字节数组转换为 base64 字符串?

如何在 Java 中将字节数组转换为 Base64?

xml解析base64字符串丢失问题