错误:从 'const prog_uchar*' 进行转换 到“字节” 失去精度?
错误出现在这一行:
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];
我可以在参考文献中看到 prog_uchar 是 1 个字节(0 到 255)。 所以我不明白关于失去精度的错误? 任何想法?
The error is at this line :
dataArray[iLedMatrix][iRow] |= (byte)(bufferPattern[iRow]) & (1<<7);
dataArray is : byte dataArray[NUMBER_LED_MATRIX][NUMBER_ROW_PER_MATRIX];
bufferPattern is : const patternp * bufferPattern;
patternp is a typedef of the type : typedef prog_uchar patternp[NUM_ROWS];
I can see in the Reference that prog_uchar is 1 byte ( 0 to 255 ). So I do not understand the error about losing precision? Any idea?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
问题出在这个子表达式中
变量 bufferPattern 的类型为 const patternp * ,因此当应用索引器时,结果是patternp。 类型“patternp”是 prog_uchar[] 的 typedef。 所以实际上这个表达是在说
Byte 几乎肯定是单字节值,而 prog_uchar* 是平台特定的指针类型(4 或 8 字节)。 这确实会导致精度损失。 也许您打算取消引用该值?
The problem is in this sub expression
The variable bufferPattern is of type
const patternp *
so when the indexer is applied the result is patternp. The type "patternp" is typedef to prog_uchar[]. So in actuality this expression is sayingByte is almost certainly a single byte value and prog_uchar* is the platform specific pointer type (either 4 or 8 bytes). This does indeed result in a loss of precision. Perhaps you meant to dereferenc this value?
您正在尝试从指针类型转换为字节。 指针类型通常用 4 字节(32 位操作系统)或 8 字节(64 位)表示,并且您试图将其地址值转换为 1 字节。
You are trying to cast from a pointer type to byte. A pointer type is usually represented on 4 bytes (32 bit OS) or 8 bytes (64 bits), and you are trying to convert its address value to 1 byte.
bufferPattern[ iRow ]
解析为patternp
,即prog_uchar[ NUM_ROWS ]
。所以你实际上是将一个数组(作为指针实现)转换为一个字节。 没有意义; 幸运的是编译器警告了你!
bufferPattern[ iRow ]
resolves to apatternp
, which is aprog_uchar[ NUM_ROWS ]
.So you're actually casting an array (implemented as a pointer) to a byte. Makes no sense; lucky the compiler warned you!