首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >unsigned int与unsigned char的比较

unsigned int与unsigned char的比较
EN

Stack Overflow用户
提问于 2013-06-19 11:11:53
回答 2查看 7.4K关注 0票数 1

我有一个无符号字符数组,比如Data[2]。我需要它与返回unsigned int的函数的输出进行比较。

我尝试将Data[2]转换为无符号整数,反之亦然。它没有起作用。

我想要做的是:

代码语言:javascript
复制
if (Data[2] == ReadFlash2(40))
{
    //Do Something.
}

ReadFlash2是一个返回无符号整数的函数,而Data[2]是一个无符号字符。

我试着让他们每个人都出演,但没有成功。

我是不是做错了什么?我应该投射哪一个,我应该投射到什么?

谢谢。

编辑: Readflash函数的代码:

代码语言:javascript
复制
unsigned int ReadFlash2(unsigned int Addr) // use as Read Function 
{
pMem = (unsigned int*)MEM_STR_ADR; 
pMem += Addr; 
Nop(); 
return(*pMem); 
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-19 12:01:54

您似乎正在访问微控制器上的易失性内存,这可能会在调试时造成一些混乱。在比较之前,尝试将Data[2]ReadFlash(40)存储到变量中:

代码语言:javascript
复制
unsigned char data_2 = Data[2];
unsigned int readflash2_40 = ReadFlash2(40);

if (data_2 == readflash2_40)
{
    //Do Something.
}

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

票数 1
EN

Stack Overflow用户

发布于 2013-06-19 11:15:58

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

换句话说,将unsigned charunsigned int进行比较将首先提升unsigned char的兼容性,然后再进行比较。

这一切都在C99 6.3.1.8 Usual arithmetic conversions中有所介绍(在讨论了浮点类型之后):

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

则将以下规则应用于升级的操作数:

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

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

..。以此类推,但上面最后一段是适用的。

如果类型如您所述,并且Data[2]实际上与从ReadFlash2(40)返回的值相同,那么它就不是C环境,至少根据标准不是这样。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17182292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档