Индекс массива в матричный индекс

0

У меня есть byte array который индексируется одним индексом i. Но этот массив будет представлен на экране как array of array (а не матрица, так как не все строки имеют одинаковые размеры). И с помощью клавиш со стрелками я могу "просматривать" эти элементы "матрицы". Выбранный элемент будет иметь другой цвет фона. Для этого мне понадобятся rows и columns байта, которые я хочу выделить.

Поэтому мне нужна помощь по формуле для преобразования одного индекса для строки и столбца.

Я уже создал логику для ключей, т.е. Когда можно двигаться в определенном направлении, просто нужно показать на экране.

Длина полной строки - 8 байт.

В этом случае массив:

unsigned char test[] = {0x00, 0x01, 0x02, 0x03, 0x61, 0x62, 0x63, 0x07, 0x21, 0x09, 0x0A};

И это будет выглядеть так:

Изображение 174551

  • 3
    Ваш пример неполон. Если правый край действительно неровный, у вас должна быть дополнительная информация о длине линии. Если у вас всегда есть 8 байтов в строке, кроме последней, это гораздо более простой случай.
  • 0
    @unwind вопрос отредактирован
Теги:
arrays
matrix
command-line

3 ответа

3
Лучший ответ

Чтобы получить индекс, зная столбцы, строки и длину строки, вы просто выполните:

I = Row * LineLenght + Column;

Обратным является следующее:

Row = I / LineLenght; // Integer division
Column = I % LineLenght; // Reminder of the division of I by LineLenght

Это основная арифметика :)

Вы должны убедиться, что вы никогда не упадете с размера массива.

  • 1
    Совет: используйте "//" в делениях, которые требуют целочисленного результата, чтобы сделать его перспективным.
2

Для этого вы должны использовать modus и divison. Например, если вы хотите иметь 7 элементов в строке, чтобы получить первый индекс, вам нужно разделить на 7, чтобы получить второй индекс, mod на 7.

поэтому 10 станут 1, 3

  • 0
    Спасибо за ответ!
0

Я думаю, вы должны решить, в первую очередь, сколько столбцов вы хотите иметь (назовите это число X). Таким образом, у вас будут Y строк (все полные, 1 или 0 неполные). Теперь, когда вы хотите преобразовать индекс i: row = i/Y, column = i% Y.

  • 0
    Я думаю, ты имел в виду X где-то в конце там. В противном случае это не имеет смысла.
  • 0
    Да, это должно быть X, а не Y в обеих формулах

Ещё вопросы

Сообщество Overcoder
Наверх
Меню