1

错误在这一行:

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

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

4

3 回答 3

5

问题出在这个子表达式中

(byte)(bufferPattern[iRow])

变量 bufferPattern 是类型const patternp *,因此当应用索引器时,结果是 patternp。“patternp”类型是 prog_uchar[] 的 typedef。所以实际上这个表达式是在说

将 prog_uchar* 转换为字节

Byte 几乎可以肯定是单字节值,而 prog_uchar* 是平台特定的指针类型(4 或 8 字节)。这确实会导致精度损失。也许你的意思是取消引用这个值?

(byte)(*(bufferPattern[iRow]))
于 2009-04-17T19:46:34.710 回答
3

您正在尝试从指针类型转换为字节。指针类型通常以 4 字节(32 位操作系统)或 8 字节(64 位)表示,并且您试图将其地址值转换为 1 字节。

于 2009-04-17T19:45:14.947 回答
0

bufferPattern[ iRow ]解析为 a patternp,即 a prog_uchar[ NUM_ROWS ]

因此,您实际上是将数组(实现为指针)转换为字节。没有意义; 幸运的是编译器警告你!

于 2009-04-17T19:48:59.637 回答