3

次のように16進値と増分値を出力するPythonで簡単なスクリプトを実行しようとしています。

 char = 0
 char2 = 0

 def doublehex():
    global char,char2
    for x in range(255):
        char = char + 1
        a = str(chr(char)).encode("hex")
        for p in range(255):
           char2 = char2 + 1
           b = str(chr(char2)).encode("hex")
           c = a+" "+b
           print "testing with:%s"%(c)
doublehex()

出力:

testing with:01 01
testing with:01 02
testing with:01 03
[snip]
testing with:01 fd
testing with:01 fe
testing with:01 ff

Traceback (most recent call last):
  File "test2.py", line 16, in doublehex
   b = str(chr(char2)).encode("hex")
ValueError: chr() arg not in range(256)

実際に私がやろうとしていることは次のとおりです。

01 01
01 02
[snip]
01 ff
02 01
02 02

など、までff ff。スクリプトの何が問題になっていますか?

また、私は試すことができないようです:

00 01
00 02

どうしてか分かりません。

4

6 に答える 6

6
for x in xrange(256):
    for y in xrange(256):
        print '%02x %02x' % (x, y)
于 2010-06-04T06:57:56.817 に答える
4

char2 = 0前に設定する必要があります

for p in range(255):

そして実際には、カウンターは必要ありません-char、char2

以下は0からffまで機能します

for x in range(256):
    for p in range(256):
        print chr(x).encode("hex"),chr(p).encode("hex")
于 2010-06-04T06:56:30.513 に答える
1

ワンライナーも(インポートを除く):

import itertools
hexs = itertools.product(*([[chr(x).encode("hex") for x in range(256)]] * 2))
于 2010-06-04T07:45:53.553 に答える
1

なぜ単純なものではないのですか?

for x in range(0, int("FFFF", 16)):
    print "%x" % x
于 2010-06-04T07:01:40.250 に答える
0

16進値を出力するには、次のようにします。

for i in range(255):
    print "%x" % i
于 2010-06-04T06:58:26.273 に答える
0

Python 2.6 を使用している場合は、4 行で実行する方法があります。

import itertools

char_pair_list = itertools.product(range(256),range(256))
for char_pair in char_pair_list:
    print str(chr(char_pair[0])).encode("hex"), ',' , str(chr(char_pair[1])).encode("hex")
于 2010-06-04T08:07:57.820 に答える