2

明らかに、ワイルドカード%xはバイト16進値として認識されないため、「ValueError:invalid\xescape」というエラーが発生します。

これを回避する方法は?私はPythonに精通していません。

for i in xrange(0,length):

  if i % 2 == 0:

    tempArray.append(unpack("B",payload_raw[x])[0]^key)
    x += 1

  else:

    randomByte = random.randint(65,90)
    tempArray.append(randomByte)

    for i in range(0,len(tempArray)):

      tempArray[i]="\x%x"%tempArray[i]

    for i in range(0,len(tempArray),15):

      outArray.append("\n'"+"".join(tempArray[i:i+15])+"'")
      outArray = "".join(outArray)
      devide = "i % 2;"
      open_structure = open(structure).read()
      code = open_structure % (junkA,outArray,junkB,key,length,devide)
      b.write(code)
      b.flush()
4

2 に答える 2

6

chr()0から255までの値のバイト文字列を提供します。

>>> chr(0xd3)
'\xd3'
于 2012-08-30T15:04:23.670 に答える
2

イグナシオの答えは正しいですが、フォースのダークサイドもあります:

>>> your_string = r'\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21'
>>> your_string.decode('string-escape')
'Hello, World!'

したがって、生のリテラル('\x'の代わりにr'\ x')を使用し、メソッドを使用してエスケープを文字に変換することで、問題を修正できstr.decodeたはずです。

于 2012-08-30T15:40:12.047 に答える