错误在这一行:
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).所以我不明白失去精度的错误?任何的想法?
问题出在这个子表达式中
(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)