unsigned int和unsigned char之间的比较

时间:2013-06-19 03:11:53

标签: c type-conversion unsigned-integer unsigned-char mplab

我有一个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); 
}

2 个答案:

答案 0 :(得分:3)

你根本不需要施放它们,C中与隐式促销有关的规则应该为你处理。

换句话说,将unsigned charunsigned 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.
}

现在,您应该能够通过查看变量中的值来检查要比较的实际值。