C++ 错误:从';施工进度*和#x27;至';字节';失去精确性?
错误在这一行:C++ 错误:从';施工进度*和#x27;至';字节';失去精确性?,c++,c,avr,C++,C,Avr,错误在这一行: dataArray[iLedMatrix][iRow] |= (byte)(bufferPattern[iRow]) & (1<<7); dataArray[iLedMatrix][iRow]|=(字节)(bufferPattern[iRow])&(1您正在尝试从指针类型转换为字节。指针类型通常表示为4字节(32位操作系统)或8字节(64位),您试图将其地址值转换为1字节。您试图将指针类型转换为字节。指针类型通常表示为4字节(32位操作系统)或8字节(64
dataArray[iLedMatrix][iRow] |= (byte)(bufferPattern[iRow]) & (1<<7);
dataArray[iLedMatrix][iRow]|=(字节)(bufferPattern[iRow])&(1您正在尝试从指针类型转换为字节。指针类型通常表示为4字节(32位操作系统)或8字节(64位),您试图将其地址值转换为1字节。您试图将指针类型转换为字节。指针类型通常表示为4字节(32位操作系统)或8字节(64位),您试图将其地址值转换为1字节。此子表达式中存在问题
(byte)(bufferPattern[iRow])
变量bufferPattern的类型是constpatternp*
,因此当应用索引器时,结果是patternp。类型“patternp”是typedef to prog_uchar[],因此实际上这个表达式是
将程序强制转换为字节
Byte几乎可以肯定是一个单字节值,而prog_uchar*是平台特定的指针类型(4或8字节)。这确实会导致精度损失。也许您想取消引用此值
(byte)(*(bufferPattern[iRow]))
问题就在这个子表达式中
(byte)(bufferPattern[iRow])
变量bufferPattern的类型是constpatternp*
,因此当应用索引器时,结果是patternp。类型“patternp”是typedef to prog_uchar[],因此实际上这个表达式是
将程序强制转换为字节
Byte几乎可以肯定是一个单字节值,而prog_uchar*是平台特定的指针类型(4或8字节)。这确实会导致精度损失。也许您想取消引用此值
(byte)(*(bufferPattern[iRow]))
bufferPattern[iRow]
解析为patternp
,它是一个程序[NUM\u ROWS]
因此,实际上您正在将数组(实现为指针)强制转换为字节。没有意义;幸运的是编译器警告您!bufferPattern[iRow]
解析为pattern p
,这是一个程序[NUM\u ROWS]
因此,实际上您正在强制转换一个数组(实现为指针)一个字节。没有意义;幸运的是编译器警告过你!你找到了问题和正确的解决方案。Thx,我的C有点生锈,我需要醒来!Thxin碰巧,因为平台是AVR-指针只有16位。你找到了问题和正确的解决方案。Thx,我的C有点生锈,我需要醒来!Thxin碰巧,因为平台是AVR-指针只有16位。谢谢,无法接受,因为你对原因的理解是正确的,但Jared得到了原因和解决方案。谢谢,无法接受,因为你对原因的理解是正确的,但Jared得到了原因和解决方案。