将值转换为行,列和char

时间:2009-06-12 03:56:43

标签: python math

我的数据结构初始化如下:

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

8个字符,8行,每行有5位用于列,因此每个整数可以在0到31之间(包括0和31)。

我必须将数字177(可以在0到319之间)转换为字符,行和列。

让我再试一次,这次是一个更好的代码示例。没有设置位。

好的,我添加了相反的问题。也许这会有所帮助。

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

2 个答案:

答案 0 :(得分:2)

好的,这看起来好像你正在使用1x8 LCD显示器,每个字符是8行5像素。

因此,您总共有8 *(8 * 5)= 320像素,并且您希望将像素的索引映射到“framebuffer”中描述显示内容的位置。

我假设像素像这样分布(仅针对第一个字符显示),您的初始循环表明这是正确的:

 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()来明确数字是整数。

请注意,您可能需要翻转列,因为它会从左侧开始编号。

答案 1 :(得分:1)

您在寻找divmod功能吗?

[编辑:使用python运算符而不是伪语言。]

char is between 0 and 319

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