unsigned char類型指針與int型數據的轉換

  unsigned char類型指針與int型數據的轉換 2010-12-31 17:58:46
標籤:style 嵌入式
原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://lancelot.blog.51cto.com/393579/470035

前兩天寫了個程序,在PC上單元測試一切正常,但是加載到嵌入式系統中運行,執行的結果總是不正確,糾察了很久,發現問題出現在如下代碼:

    unsigned int type;

    unsigned char *pType;

   

    type = 2;

    pType = (unsigned char *)&type;

 

在PC機上,上述代碼運行後,type=2, *pType=2,而在嵌入式系統中運行,得到的值卻是type=2, *pType=0。

經過查閱資料才發現,原來這次使用的嵌入式系統數據存儲是大端結構,低地址存放的是高位數據,上述數據的存儲形式如下:

image

指針pType指向的是type變量的第一個字節所在的地址,實際上該字節保存的數據是type變量的最高字節的值。

在PC機上,數據存儲是小端模式,低地址存放的是低位數據,上述數據的存儲形式如下:

image

指針pType指向的數據正好就是type變量最低位字節的數據。

因此,編寫嵌入式系統的代碼,如果想要考慮到通用性,則應當儘量避免使用上述的指針用法來訪問int類型數據的每個字節的值,而是應該使用int類型數據進行左移、右移等操作得到相應字節的值,這樣不管是大端還是小端存儲,都不會有問題。

本文出自 “rainman” 博客,請務必保留此出處http://lancelot.blog.51cto.com/393579/470035

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章