在我介紹操作系統的過程中,我們的任務是確定一個系統是大還是小的。我已經找到了很多關於如何去做的結果,並且我已經盡我所能來重建自己的代碼版本。我懷疑這是不是做的最好的方式,但它似乎工作:鑄造char *對int的引用做了什麼? (使用C)
#include <stdio.h>
int main() {
int a = 0x1234;
unsigned char *start = (unsigned char*) &a;
int len = sizeof(int);
if(start[0] > start[ len - 1 ]) {
//biggest in front (Little Endian)
printf("1");
} else if(start[0] < start[ len - 1 ]) {
//smallest in front (Big Endian)
printf("0");
} else {
//unable to determine with set value
printf("Please try a different integer (non-zero). ");
}
}
我已經看到了這行代碼(或某些版本),在幾乎所有的答案,我已經看到了:
unsigned char *start = (unsigned char*) &a;
這裏發生了什麼事?我通常理解施法,但如果將一個int轉換爲char指針,會發生什麼?我知道:
unsigned int *p = &a;
分配的A到P的內存地址,並可以通過你提領p影響的值。但我完全失去了與char發生的事情,更重要的是,不知道爲什麼我的代碼工作。
感謝您幫助我完成我的第一篇SO文章。 :)
您正在將'int'的地址('int'指針)轉換爲'unsigned char'指針。這意味着當你使用'* start'時,你讀取一個字節的數據,而使用'a'最可能讀取四個字節的數據。 –
@JonathanLeffler所以基本上這樣工作,因爲字符總是1個字節 - 完全非操作系統依賴於?最後,我是否在條件語句中比較地址號碼或地址中存儲的值? –