C51程序編寫的時候要注意unsigned long的問題


最近在編寫一個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丟失前兩字節,可以查一查是不是這個問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM