我想在二进制字符串中添加十六进制值,以便最终得到一个可以传输的二进制字符串。
我想要的是:
StringToAppend = "5ce7e615ff0000000000010202041f0140009e005d006404084c5ce82215ff1d02000000010202041f013b0097005c005e04777c"
(我以未加模式的形式将其添加到字符串la StatusStr = chr(0)
我该怎么做呢???这就是我所拥有的:
>>> not_macs_buffer= unhexlify("5ce7e615ff0000000000010202041f0140009e005d006404084c5ce82215ff1d02000000010202041 f013b0097005c005e04777c")
>>> StatusStr = chr(0)
>>> for i in xrange(0,len(not_macs_buffer)):
... StatusStr +=chr(not_macs_buffer[i])
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: an integer is required
>>>
答案 0 :(得分:1)
你要将字符串传送给/从哪里传送?它必须是十六进制吗?
问题似乎在于您是将十六进制字符串转换为二进制字符串,然后在循环中尝试使用chr()将字符串字符转换为字符。这会失败,因为chr()只接受表示256值ASCII码的整数值,而不是字符串。
要解决您的问题,只需将StatusStr +=chr(not_macs_buffer[i])
更改为:
StatusStr += not_macs_buffer[i]
当然,你可以完全放弃循环。
StatusStr = chr(0) + not_macs_buffer
如果您确实需要将整数列表转换为字符串,则可以使用列表推导然后加入列表。 (我不会举一个例子,因为它不相关)
修改强>
如果要将空值添加到原始十六进制字符串,可以执行以下操作:
StringToAppend = '5ce7e6' # ... snip the real value
StatusStr = hexlify(chr(0)) + StringToAppend
# or
StatusStr = hexlify('\x00') + StringToAppend
# or
StatusStr = '0000' + StringToAppend
答案 1 :(得分:0)
嗯,非常感谢,但实际上我最终做了什么才能得到我想要的东西:
>>> not_macs_buffer= unhexlify("5ce7e615ff0000000000010202041f0140009e005d006404084c5ce82215ff1d02000000010202041 f013b0097005c005e04777c")
>>> StatusStr = chr(0)
>>> for i in xrange(0,len(not_macs_buffer)):
... StatusStr +=chr(ord(not_macs_buffer[i]))