質問

私はこのライブラリを使用しようとしています: http://pastebin.com/xgpxpgtw (使用の例: http://pastebin.com/fnfaw3fh)彼のようにすべてのバイトを配列で分割したくないので、私はいくつかの問題があります。

私のテストスクリプトは次のようになります:

import random
from random import *

def onerand(packet):
    pack  = packet[:]
    byte = str(chr(choice(range(256))))
    pack[choice(range(len(packet)))]= byte
    print "fuzzing rand byte:%s\n" % (byte.encode("hex"))
    return pack

test = "\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63"

while True:
   print onerand(test)

そして実際に戻ります:

Traceback (most recent call last):
  File "test.py", line 14, in <module> 
    print onerand(test)
  File "test.py", line 7, in onerand
    pack[choice(range(len(packet)))]= byte
TypeError: 'str' object does not support item assignment

それでは、テストパラメーターでその機能を使用できるようにするにはどうすればよいですか?

ありがとう !

役に立ちましたか?

解決

それ以外の pack = packet[:], 、 使用する pack = list(packet), 、 その後 return ''.join(pack) 最後に。

文字列の単一のバイトを置き換えることはできませんが、文字列のリストに変換し、1つのアイテムを交換してから、変換することができます。

他のヒント

Pythonでは、文字列は不変です。機能に合格します onerand 文字列、引数名 packet, 、それをコピーしてローカル名を与えます pack (まだ文字列、したがって不変)、あなたはしようとします

pack[whatever] = byte

インデックスは問題ではありません。不変の文字列を変更しようとしています。それはエラーメッセージがあなたに伝えていることです、それは私にはできる限りはっきりと思われます:あなたはそれをすることはできません。

すべてのバイトを配列に分割したくない

まああなたは確かに使用することはできません ストリング, 、それらの一部を割り当てる必要がある場合。とにかく、アレイに対して何がありますか? import array, 、 使用する pack = array.array('c', packet) それ以外の pack = packet[:], 、そして幸せに暮らす - array.array 非常にコンパクトでスピーディです、 可変性も!

編集: : 君 たぶん......だろう 受け入れられている答えのように、リストを使用して行いますが、それはパフォーマンスが本当に急な相対的なコストでのみです。たとえば、考えてみてください。

$ py26 -mtimeit -s's="".join([str(x)[0] for x in range(99)]); import array
> ' 'a=array.array("c",s); a[23]="b"; b=a.tostring()'
1000000 loops, best of 3: 1.09 usec per loop
$ py26 -mtimeit -s's="".join([str(x)[0] for x in range(99)]); import array
> ' 'a=list(s); a[23]="b"; b="".join(a)'
100000 loops, best of 3: 7.68 usec per loop

a list よりはるかに一般的な構造です array.array ここで本当に必要なのは、間違ったデータ構造を選択する際に7倍以上の減速です。 (Python 2.7では、4倍以上のスローダウンである「唯一の」ではひどくありませんが、現在のマシンよりも4倍速いマシンを購入するのにどれだけの費用がかかるかを考えてください。 「Just」では、7回以上ではなく4回以上のものは、まだ十分な副産物です;-)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top