错误:从'const prog_uchar*'转换为'byte'会失去精度?

Pat*_*ins 1 c c++ avr

错误在这一行:

dataArray[iLedMatrix][iRow] |=  (byte)(bufferPattern[iRow]) & (1<<7);
Run Code Online (Sandbox Code Playgroud)

dataArray是: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).所以我不明白失去精度的错误?任何的想法?

Jar*_*Par 5

问题出在这个子表达式中

(byte)(bufferPattern[iRow])
Run Code Online (Sandbox Code Playgroud)

变量bufferPattern的类型是,const patternp *所以当应用索引器时,结果是patternp.类型"patternp"是prog_uchar []的typedef.所以实际上这个表达是这么说的

将prog_uchar*转换为一个字节

字节几乎肯定是单字节值,prog_uchar*是平台特定的指针类型(4或8字节).这确实会导致精度损失.也许你想要取消这个价值?

(byte)(*(bufferPattern[iRow]))
Run Code Online (Sandbox Code Playgroud)