Преобразовать значение в строку, столбец и символ - PullRequest
1 голос
/ 12 июня 2009

Моя структура данных инициализируется следующим образом:

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

8 символов, 8 строк, каждая строка имеет 5 битов для столбцов, поэтому каждое целое число может находиться в диапазоне от 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 ]

2 голосов
/ 12 июня 2009

Хорошо, это выглядит так, как будто вы работаете с ЖК-дисплеем 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 голос
/ 12 июня 2009

Вы ищете функцию divmod?

[Редактировать: использование операторов python вместо псевдоязыка.]

char is between 0 and 319

character = (char % 40)
column    = (char / 40) % 5
row       = (char / 40) / 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...