You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python3中从input()获取字节数组并转换为UUID?

解决字节数组转UUID的输入解析问题

问题的核心在于:你从终端输入的\223ge\254...是字面量字符串,input()会原样读取它,其中的反斜杠和数字都是独立字符,并没有被解析成对应的字节。比如输入里的\223会被当成4个单独的字符,而不是一个八进制转义对应的字节,这就导致最终的字节长度远超过UUID要求的16个字节。

这里有个简单且安全的解决方案,利用ast.literal_eval把输入的字符串解析成Python原生的字节对象:

from uuid import UUID
import ast

def encode_client_id():
    bytes_str = input('Paste bytes string from decoded blob here: ')
    # 将输入包装为Python字节字面量格式,通过ast解析为真实字节
    byte_data = ast.literal_eval(f"b'{bytes_str}'")
    print(UUID(bytes=byte_data))

if __name__ == '__main__':
    encode_client_id()

为什么这个方法有效?

ast.literal_eval会安全地评估输入的字符串为Python字面量。当我们把输入的字符串用b''包裹后,它就变成了一个标准的Python字节字面量(和你示例里的b'\223ge...'格式一致),ast.literal_eval会正确解析其中的八进制转义序列,生成和你示例中完全相同的字节数组。

测试验证

运行这段代码后,输入你提供的字节字符串:

\223ge\254\367\217F\303\206\363\313H\222\207\362\216

会输出正确的UUID:

936765ac-f78f-46c3-86f3-cb489287f28e

为什么之前的尝试失败?

  • 直接用UUID(bytes=bytes_str):bytes_str是字符串类型,不是字节对象,而且内容是未解析的转义字符,长度不符合要求。
  • 用bytes(bytes_str, encoding='utf-8'):这只是把字面量字符串的每个字符转换成UTF-8字节,比如\会被转成\\对应的字节,最终得到的字节数组长度远大于16,自然触发ValueError。

内容的提问来源于stack exchange,提问作者A_Vel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 08:02:46