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

使用binascii.a2b_hex转十六进制字符串遇Odd-length string错误求助

解决binascii.Error: Odd-length string问题

报错原因

binascii.a2b_hex要求输入的十六进制字符串必须是偶数长度——每两位十六进制字符对应1字节二进制数据。你提供的十六进制字符串177B16283F6C72F52DB9F00DF2629EB6F925A67AEF85A93F5588C62DCDB0050长度为63,是奇数,因此触发错误。

问题根源

生成该十六进制字符串的代码"{0:0>4X}".format(int(bin_str,2))存在缺陷:格式符0>4X仅保证输出至少4位,不会自动补全为偶数位。你提供的二进制字符串长度为252位(252÷4=63),对应63位十六进制,正好是奇数,最终输出的字符串长度不符合a2b_hex的要求。

解决方案

方法1:补前导0至偶数长度

生成十六进制字符串后,检查长度是否为奇数,是则在开头补一个0:

bin_str = '0000000101110111101100010110001010000011111101101100011100101111010100101101101110011111000000001101111100100110001010011110101101101111100100100101101001100111101011101111100001011010100100111111010101011000100011000110001011011100110110110000000001010000'
hex_str = "{0:X}".format(int(bin_str, 2))
# 补前导0确保偶数长度
if len(hex_str) % 2 != 0:
    hex_str = '0' + hex_str
# 现在转换不会报错
import binascii
binary_data = binascii.a2b_hex(hex_str)

方法2:格式化时指定偶数长度

计算所需的最小偶数长度,直接在格式化时补全:

bin_str = '0000000101110111101100010110001010000011111101101100011100101111010100101101101110011111000000001101111100100110001010011110101101101111100100100101101001100111101011101111100001011010100100111111010101011000100011000110001011011100110110110000000001010000'
bin_len = len(bin_str)
hex_len = (bin_len + 3) // 4  # 计算十六进制最小位数
# 确保十六进制长度为偶数
if hex_len % 2 != 0:
    hex_len += 1
hex_str = "{0:0>{len}X}".format(int(bin_str, 2), len=hex_len)
# 转换二进制数据
import binascii
binary_data = binascii.a2b_hex(hex_str)

方法3:使用bytes.fromhex简化转换(需先处理字符串)

bytes.fromhex和binascii.a2b_hex逻辑一致,同样要求偶数长度字符串,处理后可直接使用:

hex_str = "{0:X}".format(int(bin_str, 2))
if len(hex_str) % 2 != 0:
    hex_str = '0' + hex_str
binary_data = bytes.fromhex(hex_str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:11:16