システムがビッグエンディアンまたはリトルエンディアンであるかどうかを報告するコマンドを知っていますか、またはPerlまたはコマンドの文字列を使用するこのような手法の最良のオプションですか?
Perl
# little
$ perl -MConfig -e 'print "$Config{byteorder}\n";'
12345678
# big
$ perl -MConfig -e 'print "$Config{byteorder}\n";'
87654321
od | awk
# little
$ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
1
# big
$ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
0
参照資料
@Gilles-ほんとうに、ハックのように感じます(少なくとも私には)。確かに、Solaris + AIXなどの他のシステムで移植可能に見えますが、32ビットと64ビットのように、システムのエンディアンネスをもう少し明確に決定する必要があるように思えたので、そうではなかったことに少し驚きました」 t。新しい
—
slm
lscpu
方法は、私が期待するものです。
エンディアンネスは実際にはワードサイズよりも簡単に判断できます。なぜなら、リトルエンディアンでもビッグエンディアンでもないプラットフォームを見つけるのは難しいからです(少なくとも整数の場合、フロートは別の問題です)。 32ビットと64ビットの間(CPU、カーネル、ユーザーランド、特定のプロセス)。
—
ジル 'SO-悪であるのをやめる'
@Gilles-はい、私は主にSolarisまたはLinuxで育ったため、私の世界観はおそらく軽視されています。それ以上はありません。
—
slm
この
—
MattBianco 14
od
アプローチは、Linuxだけでなく、ほとんどのオープンシステムで機能するはずlscpu
です。そのため、「最良」とは状況に依存します。
od
メソッドの何が問題になっていますか?シンプルでどこでも動作します。それはあなたの質問の本文を読む前に私が考えたことです。