2010-06-04 88 views
3

我試圖做在Python中一個簡單的腳本,將打印十六進制值和增量值是這樣的: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

您需要

for p in range(255): 

設置char2 = 0而實際上,你並不需要計數器 - 焦炭,CHAR2

下面就從0工作FF

for x in range(256): 
    for p in range(256): 
     print chr(x).encode("hex"),chr(p).encode("hex") 
6
for x in xrange(256): 
    for y in xrange(256): 
     print '%02x %02x' % (x, y) 
0

要打印十六進制值,只需執行如下操作:

for i in range(255): 
    print "%x" % i 
1

爲什麼不是簡單的東西?

for x in range(0, int("FFFF", 16)): 
    print "%x" % x 
1

一個一個襯墊,以及(減去進口):

import itertools 
hexs = itertools.product(*([[chr(x).encode("hex") for x in range(256)]] * 2)) 
+0

嘿,比我好:) – 2010-06-04 08:08:39

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")