【问题标题】:Python Convert class<str> to class <bytes>Python 将类<str> 转换为类<bytes>
【发布时间】:2018-11-05 20:04:10
【问题描述】:

我有这个带类的字符串值:

key = "b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'"

我希望它转换为带类

key = b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'

我将如何在 Python 中执行此操作?任何将不胜感激。

【问题讨论】:

  • 可能是ast.literal_eval
  • 您最初是如何产生key 的?看起来你应该修复任何给你输出的东西
  • 反斜杠可能也被转义了?
  • 这显然应该是字节,有人想保证 str 所以他们做了str(my_bytes) 而不是my_bytes.decode('latin1') 假设你真的不只是希望它是字节
  • 奇怪,我找不到合适的骗子。已回答。

标签: python arrays string byte


【解决方案1】:

key 的提供者应该被固定为存储值而不是字节的表示

无论如何,要撤消它,您可以使用相反的方法,即ast.literal_eval

import ast

key = r"b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'"
print(ast.literal_eval(key))

哪个打印:

b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'

请注意,我必须在 key 字节文字上使用原始前缀,这可能与您拥有的输入数据匹配。

此修复不会取代对整个链的正确修复:转换为表示并将其解析回 CPU 方面的成本。

【讨论】:

    【解决方案2】:

    如果您的key 变量的值实际上是"b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'"(而不是@Jean-FrançoisFabre 的答案假定的r"b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'"),您可以使用int.to_bytes 将key 中的字符转换为剥离后的字节前两个和最后一个字符(分别是b' 和'):

    b''.join(ord(c).to_bytes(1, 'big') for c in key[2:-1])
    

    这会返回:

    b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'
    

    【讨论】:

      猜你喜欢
      • 2018-12-26
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 2014-11-25
      • 1970-01-01
      • 2023-01-19
      相关资源
      最近更新 更多