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

我将创建一个 Python 脚本,将 Base64 字符串解码为字节数组(或十六进制值数组)。

我的项目的嵌入式方面是一个微控制器,它从原始字节开始创建一个 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 范围内的可变整数序列,每个字节一个整数。

标签: python string embedded base64 decode


【解决方案1】:

您完全可以使用bytearraybinascii 模块和 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 只需要更漂亮的打印。很高兴我能帮忙:)
猜你喜欢
  • 1970-01-01
  • 2012-07-21
  • 2018-06-25
  • 1970-01-01
  • 2019-10-12
  • 2016-10-21
  • 2010-10-26
  • 2020-05-17
  • 1970-01-01
相关资源
最近更新 更多