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

时间:2009-04-17 19:40:13

标签: c++ c avr

错误就在这一行:

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)。所以我不明白失去精度的错误?有什么想法吗?

3 个答案:

答案 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 ]解析为patternpprog_uchar[ NUM_ROWS ]

所以你实际上是在为一个字节构建一个数组(实现为指针)。没有意义;幸运的是编译器警告过你!