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

Python中长字节如何表示?转换时最高位为何看似丢失?

关于Python十六进制转字节的疑问解答

为什么看起来0x64没被转换为字节?

这是Python对bytes对象的显示方式造成的误解。b'd\x1b\xea\xc6'里的'd'就是0x64对应的ASCII字符——0x64的十进制值是100,正好是小写字母d的ASCII码。Python打印bytes对象时,会把可打印的ASCII字符(范围0x20-0x7E)直接显示为字符,不可打印的才用\xXX的十六进制转义格式。

你可以用以下代码验证:

byte_data = b'd\x1b\xea\xc6'
print(byte_data[0])          # 输出100,即0x64的十进制值
print(hex(byte_data[0]))     # 输出0x64,确认这就是目标十六进制值

如何表示任意长十六进制值并将其视为字节?

有三种可靠的方法:

  • 直接使用bytes.fromhex():传入纯十六进制字符串(大小写均可),自动转换为对应字节,支持任意长度:
    # 转换4字节十六进制
    bytes.fromhex("641BEAC6")  # 得到b'd\x1b\xea\xc6'
    # 转换更长的十六进制串
    bytes.fromhex("123456789ABCDEF01A")  # 得到b'\x124Vx\x9a\xbc\xde\xf0\x1a'
    
  • 整数转字节时动态计算长度:如果十六进制值是整数形式,可通过位长计算所需字节数,避免手动指定长度出错:
    hex_int = 0x641BEAC6
    # 计算字节数:(位长 +7) //8 实现向上取整
    byte_length = (hex_int.bit_length() + 7) // 8
    hex_int.to_bytes(byte_length, 'big')  # 得到b'd\x1b\xea\xc6'
    
  • 使用binascii.unhexlify():和bytes.fromhex()功能一致,适合已导入binascii模块的场景:
    import binascii
    binascii.unhexlify("641BEAC6")  # 得到b'd\x1b\xea\xc6'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:12:45