将值添加到二进制字符串

时间:2012-11-14 01:41:39

标签: python string binary append

我想在二进制字符串中添加十六进制值,以便最终得到一个可以传输的二进制字符串。 我想要的是: 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
>>> 

2 个答案:

答案 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]))