我的数据结构初始化如下:
[[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
答案 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