1. 程式人生 > >unsigned char型別指標與int型資料的轉換

unsigned char型別指標與int型資料的轉換

前兩天寫了個程式,在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型別資料進行左移、右移等操作得到相應位元組的值,這樣不管是大端還是小端儲存,都不會有問題。