码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-04-15 15:21:18      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:定义   需要   keil   输出   变量   结果   编写   一个   int   

最近在编写一个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的问题

标签:定义   需要   keil   输出   变量   结果   编写   一个   int   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!