错误:从 'const prog_uchar*' 进行转换 到“字节” 失去精度?

发布于 2024-07-17 10:55:45 字数 463 浏览 8 评论 0原文

错误出现在这一行:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

玻璃人 2024-07-24 10:55:45

问题出在这个子表达式中

(byte)(bufferPattern[iRow])

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

将 prog_uchar* 转换为字节

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

(byte)(*(bufferPattern[iRow]))

The problem is in this sub expression

(byte)(bufferPattern[iRow])

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 saying

Cast a prog_uchar* to a byte

Byte 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?

(byte)(*(bufferPattern[iRow]))
油饼 2024-07-24 10:55:45

您正在尝试从指针类型转换为字节。 指针类型通常用 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.

因为看清所以看轻 2024-07-24 10:55:45

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

所以你实际上是将一个数组(作为指针实现)转换为一个字节。 没有意义; 幸运的是编译器警告了你!

bufferPattern[ iRow ] resolves to a patternp, which is a prog_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!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文