我有一个无符号字符数组,比如Data[2]。我需要它与返回unsigned int的函数的输出进行比较。
我尝试将Data[2]转换为无符号整数,反之亦然。它没有起作用。
我想要做的是:
if (Data[2] == ReadFlash2(40))
{
//Do Something.
}ReadFlash2是一个返回无符号整数的函数,而Data[2]是一个无符号字符。
我试着让他们每个人都出演,但没有成功。
我是不是做错了什么?我应该投射哪一个,我应该投射到什么?
谢谢。
编辑: Readflash函数的代码:
unsigned int ReadFlash2(unsigned int Addr) // use as Read Function
{
pMem = (unsigned int*)MEM_STR_ADR;
pMem += Addr;
Nop();
return(*pMem);
}发布于 2013-06-19 12:01:54
您似乎正在访问微控制器上的易失性内存,这可能会在调试时造成一些混乱。在比较之前,尝试将Data[2]和ReadFlash(40)存储到变量中:
unsigned char data_2 = Data[2];
unsigned int readflash2_40 = ReadFlash2(40);
if (data_2 == readflash2_40)
{
//Do Something.
}现在,您应该能够通过查看变量中的值来检查正在比较的实际值。
发布于 2013-06-19 11:15:58
您根本不需要强制转换它们,C中与隐式提升相关的规则应该会为您解决这一问题。
换句话说,将unsigned char与unsigned int进行比较将首先提升unsigned char的兼容性,然后再进行比较。
这一切都在C99 6.3.1.8 Usual arithmetic conversions中有所介绍(在讨论了浮点类型之后):
否则,将对这两个操作数执行整数提升。
则将以下规则应用于升级的操作数:
如果两个操作数具有相同的类型,则不需要进一步转换。
否则,如果两个操作数都具有带符号整数类型或都具有无符号整数类型,则具有较小整数转换秩的类型的操作数将转换为具有较大秩的操作数的类型。
..。以此类推,但上面最后一段是适用的。
如果类型如您所述,并且Data[2]实际上与从ReadFlash2(40)返回的值相同,那么它就不是C环境,至少根据标准不是这样。
https://stackoverflow.com/questions/17182292
复制相似问题