考慮下面的代碼:確定字節順序與htons
#include <stdio.h>
#include <arpa/inet.h>
int main(int argc, char *argv[]) {
uint16_t num = 123;
if (htons(num) == num) {
printf("big endian\n");
} else {
printf("little endian\n");
}
}
我不知道該代碼是否適用於檢查字節順序?我已經看到很多問題用各種指針/字符技巧檢查它,但我認爲這更簡單。它假定如果你將一個數字轉換爲網絡字節順序(大端),如果它與原始數字相同,那麼你就是一個大端系統。否則,你在一個小端系統。
這個檢查有假設嗎?或許網絡字節順序並不總是大端,但it seems it is standardised to be so。
請注意我沒有大型機器來檢查這個代碼,並試圖模擬這樣的系統被證明是不友好的。 –
如果你想徹底徹底,這裏的假設是字節順序是大端或小端。已經有使用其他字節順序的體系結構(例如,PDP-11存儲32位值0x01020304作爲0x02 0x01 0x04 0x03)。顯然,存儲16位值只有兩種可能性。 –
真正的問題是:你爲什麼在乎呢? 'htons'和朋友們的確切意味着讓用戶不關心永恆。代碼依賴於特定永久性的託管環境通常會因設計而中斷。 – Olaf