Erreur: cast de « const prog_uchar * » à « octet » perd précision?
Question
L'erreur est à cette ligne:
dataArray[iLedMatrix][iRow] |= (byte)(bufferPattern[iRow]) & (1<<7);
tableauDonnees est: octet tableauDonnees [NUMBER_LED_MATRIX] [NUMBER_ROW_PER_MATRIX];
bufferPattern est: const patternp * bufferPattern;
patternp est un typedef du type: typedef prog_uchar patternp [NUM_ROWS];
Je peux voir dans la référence que prog_uchar est de 1 octet (0 à 255). Je ne comprends pas l'erreur de perdre la précision? Toute idée?
La solution
Le problème est dans cette sous expression
(byte)(bufferPattern[iRow])
bufferPattern la variable est de type const patternp *
donc quand l'indexeur est appliqué le résultat est patternp. Le type "patternp" est typedef à prog_uchar []. Donc, en réalité, cette expression dit
Cast un prog_uchar * à un octet
Octet est presque certainement une seule valeur d'octet et prog_uchar * est le type de pointeur spécifique de plate-forme (4 ou 8 octets). Cela ne constitue en effet une perte de précision. Peut-être que vous vouliez dire à dereferenc cette valeur?
(byte)(*(bufferPattern[iRow]))
Autres conseils
Vous essayez de lancer à partir d'un type de pointeur à l'octet. Un type de pointeur est généralement représenté sur 4 octets (32 bits OS) ou 8 octets (64 bits), et vous essayez de convertir sa valeur d'adresse de 1 octet.
bufferPattern[ iRow ]
a pour un patternp
, qui est un prog_uchar[ NUM_ROWS ]
.
Donc, vous coulée en réalité un tableau (mis en oeuvre comme un pointeur) à un octet. Ça n'a aucun sens; chanceux le compilateur vous avertit!