次の *nix コマンドは、IP とポート (127.0.0.1:80) の 16 進表現を hexdump コマンドにパイプします。
printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"'
-e フラグを使用すると、任意の形式で入力を解析できます。この場合、IP の最初の 3 オクテットを符号なし 10 進数に解析し、その後にドットを付けます。最後のオクテットも符号なし 10 進数に解析されますが、その後にコロンが続きます。最後に、ここに問題があります。ポートの 2 バイトは、改行が続く単一の符号なし 10 進数として解析されます。
このコマンドを実行するシステムのエンディアンによって、結果は異なります。ビッグ エンディアン システムではポート 80 が正しく表示されます。一方、リトル エンディアン システムではポート 20480 が表示されます。
-e を介して任意のフォーマット指定を許可しながら、エンディアンを認識するように hexdump を操作する方法はありますか?