ошибка: преобразование из 'const prog_uchar*' в 'byte' теряет точность?

Ошибка в этой строке:

dataArray[iLedMatrix][iRow] |=  (byte)(bufferPattern[iRow]) & (1<<7);

массив данных: byte dataArray[NUMBER_LED_MATRIX][NUMBER_ROW_PER_MATRIX];

bufferPattern: const patternp * bufferPattern;

patternp — это typedef типа : typedef prog_uchar patternp[NUM_ROWS];

В справочнике я вижу, что prog_uchar имеет размер 1 байт (от 0 до 255). Так я не понимаю ошибку про потерю точности? Есть идеи?


person Patrick Desjardins    schedule 17.04.2009    source источник


Ответы (3)


Проблема в этом подвыражении

(byte)(bufferPattern[iRow])

Переменная bufferPattern имеет тип const patternp *, поэтому при применении индексатора результатом будет patternp. Тип "patternp" определен как prog_uchar[]. Так что на самом деле это выражение говорит

Привести prog_uchar* к байту

Byte почти наверняка представляет собой однобайтовое значение, а prog_uchar* является типом указателя, зависящим от платформы (либо 4, либо 8 байт). Это действительно приводит к потере точности. Возможно, вы хотели разыменовать это значение?

(byte)(*(bufferPattern[iRow]))
person JaredPar    schedule 17.04.2009
comment
У вас есть проблема и правильное решение. Спасибо, мой C немного заржавел, мне нужно проснуться! Спасибо - person Patrick Desjardins; 17.04.2009
comment
Кстати, поскольку платформа AVR - указатели всего 16 бит. - person Peter Gibson; 22.09.2009

Вы пытаетесь привести тип указателя к байту. Тип указателя обычно представлен 4 байтами (32-битная ОС) или 8 байтами (64 бита), и вы пытаетесь преобразовать его значение адреса в 1 байт.

person Cătălin Pitiș    schedule 17.04.2009
comment
Спасибо, не могу принять, потому что вы правы насчет причины, но у Джареда есть причина и решение. - person Patrick Desjardins; 17.04.2009

bufferPattern[ iRow ] разрешается в patternp, что является prog_uchar[ NUM_ROWS ].

Таким образом, вы фактически преобразуете массив (реализованный в виде указателя) в байт. Не имеет смысла; повезло, что компилятор предупредил вас!

person xtofl    schedule 17.04.2009