2009-06-12 55 views
1

我的數據結構被初始化爲如下:將一個值轉換成的行,列和焦炭

[[0,0,0,0,0,0,0,0] for x in range(8)] 

8個字符,8行,每行具有用於列5個比特,所以每個整數可以在之間的範圍內0和31(含)。

我必須將數字177(可以在0和319之間)轉換爲char,row和column。

讓我再試一次,這次更好的代碼示例。沒有位被設置。

好的,我添加了相反的問題。也許這會有所幫助。

chars = [[0,0,0,0,0,0,0,0] for x in range(8)] 

# reverse solution 
for char in range(8): 
    for row in range(8): 
     for col in range(5): 
      n = char * 40 + (row * 5 + col) 
      chars[char][row] = chars[char][row]^[0, 1<<4-col][row < col] 

for data in range(320): 
    char = data/40 
    col = (data - char * 40) % 5 
    row = ? 
    print "Char %g, Row %g, Col %g" % (char, row, col), chars[char][row] & 1<<4-col 
+0

你的代碼看起來像是4x4,反正不清楚177是如何拆分成char,row,col的。你能描述你想做什麼嗎? – 2009-06-12 04:01:46

+0

這是一個8x5 :)我會做一個更好的例子。 – Scott 2009-06-12 04:09:25

回答

2

好吧,這看起來好像你用的1x8液晶顯示器,其中每個字是8行的5個像素的工作。

因此,總共有8 *(8 * 5)= 320像素,並且您想將像素的索引映射到「幀緩衝區」中描述顯示內容的位置。

我假設像素分佈是這樣的(只對第一個字符顯示),你最初的循環表明這是正確的是:

0 1 2 3 4 
5 6 7 8 9 
10 11 12 13 14 
15 16 17 18 19 
20 21 22 23 24 
25 26 27 28 29 
30 31 32 33 34 
35 36 37 38 39 

我們則有:

# Compute which of the 8 characters the pixel falls in, 0..7: 
char = int(number/40) 

# Compute which pixel column the pixel is in, 0..4: 
col = number % 5 

# Compute which pixel row the pixel is in, 0..7: 
row = int((number - char * 40)/5) 

我用明確的int() s表明數字是整數。

請注意,您可能需要翻轉該列,因爲這是從左側開始編號的。

1

您是否在尋找divmod函數?

[編輯:使用python運營商,而不是僞語言]

char is between 0 and 319 

character = (char % 40) 
column = (char/40) % 5 
row  = (char/40)/5 
+0

它沒有爲我工作。我想在那裏某處有mod,但到目前爲止我很難過。 – Scott 2009-06-12 06:46:41