1

我有一个无符号字符数组,例如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); 
}
4

2 回答 2

3

您根本不需要强制转换它们,C 中与隐式提升相关的规则应该为您解决这个问题。

换句话说,将 anunsigned char与 an进行比较unsigned int将首先促使 theunsigned char兼容,然后进行比较。

这一切都在 C996.3.1.8 Usual arithmetic conversions中进行了介绍(在讨论了浮点类型之后):

否则,对两个操作数都执行整数提升。

然后将以下规则应用于提升的操作数:

如果两个操作数具有相同的类型,则不需要进一步转换。

否则,如果两个操作数都具有有符号整数类型或都具有无符号整数类型,则具有较小整数转换等级的类型的操作数将转换为具有较高等级的操作数的类型。

...等等,但上面的最后一段是适用的。

如果类型如您所述,并且Data[2]实际上与返回的相同ReadFlash2(40),则它不是C 环境,至少不符合标准。

于 2013-06-19T03:15:57.640 回答
1

您似乎正在访问微控制器上的易失性存储器,这可能会在调试时引起一些混乱。在比较之前尝试将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-19T04:01:54.337 回答