下面的* nix命令將IP和端口(127.0.0.1:80)的十六進制表示轉換爲hexdump命令。Unix中的字節順序hexdump
printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"'
-e標誌允許任意格式解析輸入。在這種情況下,我們將IP的前三個八位字節解析爲無符號小數,後面跟着一個點。最後的八位組也被解析成一個無符號的十進制數,但後面跟着一個冒號。最後 - 這就是問題所在 - 端口的2個字節被解析爲一個單一的無符號小數,然後是一個換行符。
根據執行此命令的系統的字節順序,結果會有所不同。大端系統將正確顯示端口80;而一個小端系統將顯示端口20480.
有什麼辦法來操縱hexdump來了解endianness,同時仍然允許通過-e任意格式指定嗎?
我認爲如果平臺是小端的,那麼必須通過交換最後兩個字節來準備輸入是不可接受的,因爲您問的是這個問題? – 2009-11-20 16:38:32
它看起來像一個字節交換將是必要的? – shrizza 2009-11-20 16:44:53