あるバイナリデータを表示させようとしたら
期待していた値と全然違う値が出てきてしまった。
聞くところによるとそのデータは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();
こんな感じで以外とすんなりできました。よかった。
期待していた値と全然違う値が出てきてしまった。
聞くところによるとそのデータは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();
こんな感じで以外とすんなりできました。よかった。