リトル エンディアン/ビッグ エンディアンについて混乱があります。私は単純なものが欠けているようです。いくつかのフィードバックをいただければ幸いです。たとえば、
32 ビット値の最下位バイトと最上位バイトを取得する 2 つの関数があるとします。
#define LSB(x) ((x) & 0x000000FF)
#define MSB(x) ((x) & 0xFF000000)
私の質問は: 上記の 2 つの関数は、ビッグエンディアンとリトル エンディアンの両方のマシンで正しい結果を返しますか?
ここで、なぜ私が混乱しているのかを説明します。リトル エンディアンのマシンを使用していると想像してください。リトルエンディアン マシンでは、整数 9 は次のように (16 進数で) メモリに格納されます: 09 00 00 00 (最下位バイトが最初) ある時点で、上記の LSB 関数を使用すると、次のようになると思うかもしれません。そのような式: 09 00 00 00 & 00 00 00 FF これは 0 です - もちろん、それは LSB 関数を超える方法が最終的に機能する方法ではありません。だから私はsmthが欠けているようです。どんな助けでも感謝します。
またint y = 0x000000FF
、マシンのエンディアンに関係なく、これは 255 ですよね?