错误就在这一行:
dataArray[iLedMatrix][iRow] |= (byte)(bufferPattern[iRow]) & (1<<7);
dataArray 是:byte dataArray [NUMBER_LED_MATRIX] [NUMBER_ROW_PER_MATRIX];
bufferPattern 是:const patternp * bufferPattern;
patternp 是类型的typedef:typedef prog_uchar patternp [NUM_ROWS];
我在Reference中可以看到prog_uchar是1个字节(0到255)。所以我不明白失去精度的错误?有什么想法吗?
答案 0 :(得分:5)
问题在于此子表达式
(byte)(bufferPattern[iRow])
变量bufferPattern的类型为const patternp *
,因此在应用索引器时,结果为patternp。类型“patternp”是prog_uchar []的typedef。所以实际上这个表达是说
将prog_uchar *转换为字节
Byte几乎肯定是单字节值,prog_uchar *是平台特定的指针类型(4或8字节)。这确实会导致精度损失。也许你想要取消这个价值?
(byte)(*(bufferPattern[iRow]))
答案 1 :(得分:3)
您正在尝试从指针类型转换为byte。指针类型通常以4个字节(32位OS)或8个字节(64位)表示,并且您尝试将其地址值转换为1个字节。
答案 2 :(得分:0)
bufferPattern[ iRow ]
解析为patternp
,prog_uchar[ NUM_ROWS ]
。
所以你实际上是在为一个字节构建一个数组(实现为指针)。没有意义;幸运的是编译器警告过你!