首页 > 其他 > 详细

C51程序编写的时候要注意unsigned long的问题

时间:2020-04-15 15:15:53      阅读:216      评论:0      收藏:0      [点我收藏+]

最近在编写一个C51程序的时候,有一个四字节的数据,需要从一个数组中提取出来。结果发现一直出错。只取出来了后面两个字节数据,而前面的两字节则丢失。具体的上代码。

注意代码是在KEIL2 的C51中编译,别的环境可能不一定会出这问题。

uint8_t In[4] = {0x12, 0x34, 0x56, 0x78};

uint32_t Temp;

Temp |= In[0] << 24;

Temp |= In[1] << 16;

Temp |= In[2] << 8;

Temp |= In[3];

输出结果Temp = 0x5678。

试了好久都不行,后面以为类型定义有错误。结果又是对的。

在网上找了好半天,有的说要加L有的说要用(unsigned long)强制类型转换。经过测试不行。

后面就尝试用一个中间变量进行转换,就可以了。代码如下。

 

uint8_t In[4] = {0x12, 0x34, 0x56, 0x78};

uint32_t Temp;

uint32_t T1 = 0;

 

T1 = In[0];

T1 <<= 24;

Temp |= T1;

T1 = 0;

 

T1 = In[1];

T1 <<= 16;

Temp |= T1;

T1 = 0;

 

T1 = In[2];

T1 <<= 8;

Temp |= T1;

T1 = 0;

 

Temp |= In[3];

输出就为0x12345678了。

这样操作就可以正常的取出数据了。这个和编译的环境有关。如果在编写C51的时候,发现uint32_t丢失前两字节,可以查一查是不是这个问题。

C51程序编写的时候要注意unsigned long的问题

原文:https://www.cnblogs.com/qingfeng2018/p/12705416.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!