sergey sva
Jan 8 2008, 17:52
привет всем.
Сейчас делаю программку для графического дисплея. Символы и буквы хранятся в массиве:
code unsigned char A1[9] = {0x80,0xE0,0x9C,0x13,0x13,0x9C,0xE0,0x80,0x00}; //À
code unsigned char A2[7] = {0x81,0xFF,0x89,0x89,0x89,0x73,0x00}; //Á
code unsigned char A3[7] = {0x81,0xFF,0x89,0x89,0x89,0x76,0x00}; //Â
code unsigned char A4[7] = {0x81,0xFF,0x81,0x01,0x01,0x07,0x00}; //Ã
code unsigned char A5[7] = {0xE0,0x31,0x2F,0x21,0x3F,0xE1,0x00}; //
Было бы не плохо поместить эти массивы в один массив чтобы один элемент соответствовал
одному из этих массивов.
Наподобие такого:
char arrr[5] = {
code unsigned char A1[9] = {0x80,0xE0,0x9C,0x13,0x13,0x9C,0xE0,0x80,0x00}; //À
code unsigned char A2[7] = {0x81,0xFF,0x89,0x89,0x89,0x73,0x00}; //Á
code unsigned char A3[7] = {0x81,0xFF,0x89,0x89,0x89,0x76,0x00}; //Â
code unsigned char A4[7] = {0x81,0xFF,0x81,0x01,0x01,0x07,0x00}; //Ã
code unsigned char A5[7] = {0xE0,0x31,0x2F,0x21,0x3F,0xE1,0x00}; //
};
как это заделать не соображу . подскажите пожалуйста.
А слабо не думая почитать первоисточники:
char arrr[5][9] = { {
Сергей Борщ
Jan 8 2008, 20:44
Цитата(zltigo @ Jan 8 2008, 22:13)

char arrr[5][9] = { {
Не очень эффективно - у него массивы разной длины, короткие будут дополнены нулями. Возможно, более эффективным будет либо массив указателей, либо одномерный с разбором на этапе исполнения.
rezident
Jan 8 2008, 21:13
Цитата(Сергей Борщ @ Jan 9 2008, 01:44)

либо одномерный с разбором на этапе исполнения.
ИМХО одномерный массив, заполненный например структурами, состоящими из двух полей (количество байт в записи и сама запись), хорош только, если записи всегда извлекаются последовательно с начала массива. Если же требуется произвольный доступ к записям, то нужен еще один массив с индексами этих записей. Либо извлечение записей будет тормозить на переборе их всех каждый раз с начала массива.
SamHaris
Jan 9 2008, 07:03
В варианте предложенный zltigo
char arrr[][9] = { {
расходуются лишние байты на пустые нули в конце записи, только нужно выбрать ограничение ширины буковки.
В варианте предложенный Сергей Борщ
char* A1 = {
char* arrr[] = {A1,
расходуется память на размере указателя в осносном массиве, но его не удобно хранить в файле, так как смещение постоянно меняется.
rezident предлогает дело, в место нулей в конце, первый байт зарезервировать под размер масива или ширину буковки, что одно и тоже, тогда можно многоточие как за один символ воспринимать, или букву Ы забить.
ЗЫ. если юзается графический дисплей не лучше перейти на отрисовку линии, маштабируемость буковки повыситсчя.
Цитата(SamHaris @ Jan 9 2008, 09:03)

В варианте предложенный zltigo
Я не предлагал "вариант" хранеия фонтов, а просто прямо ответил на поставленый вопрос.
Сергей Борщ
Jan 9 2008, 11:16
Цитата(SamHaris @ Jan 9 2008, 09:03)

В варианте предложенный Сергей Борщ
char* A1 = {
char* arrr[] = {A1,
расходуется память на размере указателя в осносном массиве, но его не удобно хранить в файле, так как смещение постоянно меняется.
Да, память на указатель расходуется. Я же и написал - надо считать, на что уйдет больше памяти - на указатели или заполнение нулями. Еще надо учитываать, что вариант с указателем требует дополнительного времени на чтение указателя. Насчет хранения в файле - не понял. Если фонт подгружаемый, то массив можно сформировать внешними программами какой угодно - хоть с таблицей смещений в начале.