我有一个unsigned char数组,例如Data[2]
。我需要它与返回unsigned int的函数的输出进行比较。
我试图将Data[2]
转换为unsigned int,反之亦然。它不起作用。
我想做的是:
if (Data[2] == ReadFlash2(40))
{
//Do Something.
}
ReadFlash2
是一个返回unsigned int的函数,而Data[2]
是一个unsigned char。
我试图抛出每一个,但它没有用。
我做错了吗?我应该选择哪一个,以及我应该投哪个?
感谢。
编辑: Readflash函数的代码:
unsigned int ReadFlash2(unsigned int Addr) // use as Read Function
{
pMem = (unsigned int*)MEM_STR_ADR;
pMem += Addr;
Nop();
return(*pMem);
}
答案 0 :(得分:3)
你根本不需要施放它们,C中与隐式促销有关的规则应该为你处理。
换句话说,将unsigned char
与unsigned int
进行比较将首先促使unsigned char
兼容,然后进行比较。
C99 6.3.1.8 Usual arithmetic conversions
中涵盖了所有内容(在讨论浮点类型之后):
否则,将对两个操作数执行整数提升。
然后将以下规则应用于提升的操作数:
如果两个操作数具有相同的类型,则不需要进一步转换。
否则,如果两个操作数都有有符号整数类型或两者都有无符号 整数类型,具有较小整数转换等级类型的操作数是 转换为具有更高等级的操作数的类型。
......依此类推,但上一段是适用的。
如果类型与您所说的相同且Data[2]
实际 与ReadFlash2(40)
返回的值相同,那么不是 C环境,至少不符合标准。
答案 1 :(得分:1)
您正在访问微控制器上的易失性存储器,这可能会在调试时引起一些混乱。在比较之前尝试将Data[2]
和ReadFlash(40)
存储到变量中:
unsigned char data_2 = Data[2];
unsigned int readflash2_40 = ReadFlash2(40);
if (data_2 == readflash2_40)
{
//Do Something.
}
现在,您应该能够通过查看变量中的值来检查要比较的实际值。