0

送信できるバイナリ文字列になるように、バイナリ文字列に 16 進数値を追加したいと思います。私が欲しいのは: StringToAppend = "5ce7e615ff0000000000010202041f0140009e005d006404084c5ce82215ff1d02000000010202041f013b0097005c005e04777c"(私はこれを非hexlified形式で持っていて、それを文字列に追加したいのですが、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

何との間で文字列を送信していますか? それは16進数でなければなりませんか?

問題は、16 進文字列をバイナリ文字列に変換し、ループ内で chr() を使用して文字列文字を文字に変換しようとしているようです。chr() は文字列ではなく、256 値の ASCII コードを表す整数値のみを受け取るため、これは失敗します。

問題を解決するには、次のように変更StatusStr +=chr(not_macs_buffer[i])します。

StatusStr += not_macs_buffer[i]

もちろん、ループを完全に忘れることもできます。

StatusStr = chr(0) + not_macs_buffer

また、整数のリストを文字列に変換する必要が本当にある場合は、リスト内包表記を使用してリストを結合できます。(関係ないので例はあげません)

編集:

null 値を元の 16 進文字列に追加する場合は、次のようにします。

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 に答える