我有多个像这样的十六进制字符串(大字符串,所以我截断了中间):
0xFFD8FFEE000E41646F626500640000000002FFE11E2445786966000049492A006A0500002C010000010000002C0100000100000041646F62652050686F746F73686F702043533620284D6163 .............................................. .................................................. .................................................. .............. 7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3FF7F8F9FAFFC4001F0100030101010101010101010000000000000102030405060708090A0BFFC400B511000201020404030407050404000102770
我想将每个字符串保存在文件中。但是我的代码效果不好:
import binascii
data = binascii.a2b_hex(my_hex_string)
with open('/path/image.jpg', 'wb') as image_file:
image_file.write(data)
我收到此错误:
TypeError:奇数长度字符串
当我删除第一个0
时,我得到了这个:
TypeError:找到非十六进制数字
当我删除两个第一个字符时(因为JPG应该以FF D8开头),我再次得到这个:
TypeError:奇数长度字符串
有什么想法吗?
答案 0 :(得分:0)
你确定字符串里面没有额外的东西吗?空白,换行等等?
尝试my_hex_string.strip()
此外,有可能,你可以在字符串中有空格,所以你可以做这样的事情来清理它们:
binascii.a2b_hex(toSend.replace(' ', ''))
答案 1 :(得分:0)
3.5岁线程。但是得到了很多意见,所以我将添加我的2c。 OP的代码对我来说很好。我的猜测是十六进制字符串已损坏。最突出的是,没有看到FFD9 for "end of image."
答案 2 :(得分:0)
我遇到了同样的问题,并且测试了您的代码。我认为您的代码没有错。只需尝试从十六进制代码的开头删除0x
。我认为这对您有用。