小能豆

带有字节文字的字符串上使用了 str(),如何逆转该操作?

py

所以我有像下面这样的二进制文件b"My name is ...\n blah blah"然后我使用str()它导致"b'My name is ...\\n blah blah'"我如何撤消它并再次获得具有字节文字的变量?


阅读 10

收藏
2024-10-23

共1个答案

小能豆

要将包含字节文字的字符串 b"My name is ...\n blah blah" 转换回其原始的字节表示,可以使用 Python 的 bytes 类型。具体来说,您可以直接使用 bytes() 函数或者直接在字符串前面加上 b 前缀来获得字节对象。

示例

# 原始字节对象
original_bytes = b"My name is ...\n blah blah"

# 使用 str() 转换为字符串
string_repr = str(original_bytes)

# 打印字符串表示
print(string_repr)  # 输出:b'My name is ...\\n blah blah'

# 如果想要从字符串表示恢复到字节对象
# 1. 通过 eval()
recovered_bytes = eval(string_repr)

# 2. 直接从字符串构造字节对象(如果您知道格式)
recovered_bytes_direct = bytes(string_repr[2:-1], 'utf-8').replace(b'\\n', b'\n')

# 打印恢复的字节对象
print(recovered_bytes)            # 输出:b'My name is ...\n blah blah'
print(recovered_bytes_direct)     # 输出:b'My name is ...\n blah blah'

# 验证两者是否相等
print(recovered_bytes == original_bytes)  # 输出:True
print(recovered_bytes_direct == original_bytes)  # 输出:True

说明

  1. 使用 eval():
  2. 这个方法将字符串表示的字节对象转换回字节对象。
  3. 但是请注意,eval() 可能有安全隐患,如果您不确定字符串的来源,使用时请小心。

  4. 直接构造字节对象:

  5. 您可以通过提取字符串中的内容,利用 bytes() 函数创建字节对象。
  6. 在此例中,我们去掉了前缀 b' 和后缀 '',并用 replace() 方法将 \\n 替换为实际的换行符 b'\n'

这两种方法都可以将字节字符串的表示转换回字节对象,您可以根据具体情况选择使用。

2024-10-23