怎麼訪問一個整型數裏面的各個字節

剛剛在討論字節序的問題的時候出現了這麼一個問題,怎麼訪問一個整型變量裏面的各個字節,我們知道,如果要訪問這個整型最低地址一個字節的數據的話,可以通過如下方式:

char a = *(char*)&整型變量名;

這裏先將整型數通過取地址符號獲得變量的開始的地址,爲什麼要(char*)進行強制類型轉換呢,因爲對於整型數據的話,表示的就是以首地址開始的4個字節,它是一個整體,取它的地址後,地址對應的類型爲int*類型,即如果通過這個指針訪問的話,只能訪問到整個4個字節的空間的數據,沒法訪問單個字節。通過(char*)就將int*整型指針類型轉換爲字符型指針類型。這樣就可以訪問低地址這個字節的數據啦。那麼如果我想訪問第2個,第3個,第4個字節的數據呢。我們先來看看以下表示:

char * pc = (char*)&整型變量名;

pc現在指向首字節,要訪問下個字節只需要*(p+1)就可以(即p[1]),同理下一個*(p+2)、*(p+3)(p[2]、p[3])。那如果我們不進行指針轉換呢。我們看如下表示:

int * pi = &整型變量名;

這個時候用*pi將獲得四個字節的內容。pi+1將指向下一個整型地址空間,即0x0005地址,所以*(pi+1)(即pi[1])將訪問0x0005地址開始的四個字節的內容。這裏有點需要強調的是,*(pi+i)總是等於pi[i]。整個過程如下圖所示:


指針加1的差別
圖一:指針加1的差別

通過上面的分析,想獲得一個整型數裏面的某個字節的值的話,我們可以如下表示:

char a = ((char*)&整型變量名)[i];

i=0表示首字節,1表示第2個字節,依次類推。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章