0

我想将十六进制值添加到二进制字符串中,以便最终得到可以传输的二进制字符串。我想要的是:( StringToAppend = "5ce7e615ff0000000000010202041f0140009e005d006404084c5ce82215ff1d02000000010202041f013b0097005c005e04777c"我有这个未十六进制的形式,并想将它附加到一个字符串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
>>> 
4

2 回答 2

1

你向/从什么传输字符串?它必须是十六进制的吗?

问题似乎是您正在将十六进制字符串转换为二进制字符串,然后在您的循环中尝试使用 chr() 将字符串字符转换为字符。这失败了,因为 chr() 只接受一个表示 256 值 ASCII 代码的整数值,而不是一个字符串。

要解决您的问题,只需更改StatusStr +=chr(not_macs_buffer[i])为:

StatusStr += not_macs_buffer[i]

当然,您可以完全放弃循环。

StatusStr = chr(0) + not_macs_buffer

如果您确实需要将整数列表转换为字符串,则可以使用列表推导然后加入列表。(我不会举例,因为它不相关)

编辑:

如果要将 null 值添加到原始十六进制字符串,可以执行以下操作:

StringToAppend = '5ce7e6' # ... snip the real value
StatusStr = hexlify(chr(0)) + StringToAppend 
# or
StatusStr = hexlify('\x00') + StringToAppend 
# or
StatusStr = '0000' + StringToAppend 
于 2012-11-14T01:49:43.233 回答
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]))
于 2012-11-15T04:39:30.647 回答