ソフトウェア開発したい日記

「面白い!」と思った頭の体操や、数学の問題を載せていきます
その他ロードバイクででかけた先の写真や、ソフト開発のメモ等

リトルエンディアンとビッグエンディアン

2010年09月01日 16時36分43秒 | ソフト開発日記
あるバイナリデータを表示させようとしたら
期待していた値と全然違う値が出てきてしまった。

聞くところによるとそのデータはMotorola社のマイクロプロセッサで
書き込まれたもののようで、ビッグエンディアンであり、。
現在使用しているPCはIntel社でリトルエンディアンだからうまく読み込めないとのこと。

ビッグエンディアン、リトルエンディアンは初めて聞いた言葉なので、それに関するメモ。

実際に問題となったデータファイルは、2byte のショート型であったので
2byte のケースで考えていきます。

一言で言うと、
上位のバイトから順番に読み書きするのがビッグエンディアン
下位のバイトから順番に読み書きするのがリトルエンディアンらしい。

すなわち、「1」という数字を表現するとき
ビッグエンディアンでは「0000000100000000」
リトルエンディアンでは「0000000000000001」
となっているみたい。

ということで、互換は8bit だけシフトすればいいと思う。

DataInputStream dis = new DataInputStream(new FileInputStream(FILE_NAME));
short n = dis.readShort();
n <<= 8;
dis.close();

こんな感じで以外とすんなりできました。よかった。