-PR-
解決済み

CPU依存によりバイナリが違う

  • すぐに回答を!
  • 質問No.18942
  • 閲覧数169
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 51% (47/92)

SunOS4.0からLinuxにバイナリを移したところ2バイト以上のデータだと前後バイトのデータが逆になるという問題が起こりました。人にはCPUがIntelだからだと聞きました。CPUが違うバイナリを整形するフィルタなどはないでしょうか?データの解析ができずに困っております。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル11

ベストアンサー率 55% (155/280)

Big Endian (Sun) と Little Endian (Intel) の問題ですね。

toysmith さんのいうように、ファイルのフォーマットに依存する
と思います。非常に単純に short のデータが並んでいるだけとか、
long が並んでいるだけなら、

#!/usr/local/bin/perl
while (read(STDIN, $long, 4) == 4) {
print join('',reverse(split('',$long)));
}

という簡単なスクリプトで変換できます。double とか float も同
じです。

しかし、いろんなサイズのバイナリデータが混在してたり、文字が
入ってたりすると、自分で変換プログラムを作る必要があります。
そうはいっても、読むプログラムがあるわけですから、何らかの規
則で並んでいるはずで、上のスクリプトを適当にいじれば作れるで
しょう。

あと考えつくのは、データは変換せずに、Linux 側のプログラムを
改造して、SunOS の方式で書かれたデータをそのまま読めるように
してしまうことです。

例えば、

long endianswaplong(long l)
{
int i;
long tmp;
for (i=0; i<sizeof(long); i++) {
((char*)&tmp)[i] = ((char*)&l)[sizeof(long)-i-1];
}
return tmp;
}

というような関数(群)を作って、読むたびに変換してから利用す
ればいいのです。(動かしてないので、バグがあるかも)
お礼コメント
amu

お礼率 51% (47/92)

わざわざルーチンまで書いていただき本当にありがとうございます。早速試してみます。
投稿日時 - 2000-12-14 22:04:18

その他の回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 37% (570/1525)

SunOSとLinux(Intel)のマルチプラットホームに対応しているアプリケーションならアプリケーション自体が変換に対応しているはずなんですが。

ファイルフォーマットがわかっているのであれば標準コマンドのddで変換できることがあります。
ただ、あまりに複雑なフォーマットは無理です。
man 1 dd

フォーマットが複雑ならperlなどでスクリプトを作ったほうが早いかもしれません。
お礼コメント
amu

お礼率 51% (47/92)

全部で512バイトのヘッダと数百MBのデータ部とが有ります。ヘッダ部はビットフィールドも駆使するなどかなり複雑なので、自分でルーチンを作ることにします。
すぐに教えていただきありがとうございました。
投稿日時 - 2000-12-14 21:58:36


  • 回答No.2
レベル8

ベストアンサー率 20% (11/53)

ぅ~ん...

エンディアン問題のことではないのですか?
ビットが逆になるということでしたら,練習だと思ってC言語でチャッとフィルターを書いてみてはいかがでしょうか.
1バイト読んでは全ビットを並び替えるだけです.
お礼コメント
amu

お礼率 51% (47/92)

はい。あのあと調べて「バイトオーダー」とか「エンディアン」と呼ばれるものだと言う事がわかりました。途中にchar型なども混在するかなり面倒なデータなのですが、フォーマットはわかっているので地道にやることにします。初心者だとキーワードがわからなくて検索しても引っかからないことが多いです。そういったキーワードヲ教えていただけるだけでも非常に助かります。どうもありがとうございました。
投稿日時 - 2000-12-14 22:01:42
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

ページ先頭へ