У меня есть byte array
который индексируется одним индексом i
. Но этот массив будет представлен на экране как array of array
(а не матрица, так как не все строки имеют одинаковые размеры). И с помощью клавиш со стрелками я могу "просматривать" эти элементы "матрицы". Выбранный элемент будет иметь другой цвет фона. Для этого мне понадобятся rows
и columns
байта, которые я хочу выделить.
Поэтому мне нужна помощь по формуле для преобразования одного индекса для строки и столбца.
Я уже создал логику для ключей, т.е. Когда можно двигаться в определенном направлении, просто нужно показать на экране.
Длина полной строки - 8 байт.
В этом случае массив:
unsigned char test[] = {0x00, 0x01, 0x02, 0x03, 0x61, 0x62, 0x63, 0x07, 0x21, 0x09, 0x0A};
И это будет выглядеть так:
Чтобы получить индекс, зная столбцы, строки и длину строки, вы просто выполните:
I = Row * LineLenght + Column;
Обратным является следующее:
Row = I / LineLenght; // Integer division
Column = I % LineLenght; // Reminder of the division of I by LineLenght
Это основная арифметика :)
Вы должны убедиться, что вы никогда не упадете с размера массива.
Для этого вы должны использовать modus и divison. Например, если вы хотите иметь 7 элементов в строке, чтобы получить первый индекс, вам нужно разделить на 7, чтобы получить второй индекс, mod на 7.
поэтому 10 станут 1, 3
Я думаю, вы должны решить, в первую очередь, сколько столбцов вы хотите иметь (назовите это число X). Таким образом, у вас будут Y строк (все полные, 1 или 0 неполные). Теперь, когда вы хотите преобразовать индекс i: row = i/Y, column = i% Y.
X
где-то в конце там. В противном случае это не имеет смысла.