ビッグエンディアンと指定されているバイナリファイルがあります。
これをPC(intel系,Linux or Windows)で処理する場合、エンディアンの変換が必要だろうと思います。具体的にはどのようにするのでしょうか。ネットでもダウンロードできそうですが。
変換コマンド -btol ファイル名(ビッグ)> ファイル名(リトル)
という感じですかね。こんなものあるでしょうか。
購入したバイナリファイルなのですが、このご時勢たいていPCで処理するわけでしょうからリトルであってほしいものだと思いますが。
ところでMACはビッグとリトルのどっちなのでしょうか。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
#2の方の言われるとおり、レイアウトが分からないと難しいでしょう。
2byteデータ変換メソッド、4byteデータ変換メソッド、8byteデータ変換メソッドはそれぞれ作成できます。
しかし、1レコードが4byteのデータのレイアウトが下記のように異なっている場合、変換結果は異なることになります。
1)1byteデータ 1byteデータ 2byteデータ
2)2byteデータ 2byteデータ
このため、一般的にはレイアウトが分からないと変換は困難だと思います。
No.5
- 回答日時:
google で検索したらこのようなものが見つかりました.
使えるのではないでしょうか?
エンディアン変換スクリプト
http://mausam.hyarc.nagoya-u.ac.jp/~mhori/script …
No.4
- 回答日時:
>>という風なプログラムだと思います。
具体的なプログラムの書き方を教えて頂きたいのですが。えーと、元々、購入したデータがリトルエンディアンだったとしても、バイナリファイルの場合にはレイアウトが分からないと処理できません。なので、イロイロなサイズのレコード(可変長)だった場合はもとより、固定長でも、いまのままでは処理できない可能性が大きいですね。
なお、データ変換プログラムは、そういう流れになります。その後のデータ処理のプログラムと比較して、かなり簡単な部類になると思いますので、こてしらべ的に自分で考えて(ネットで探して等)作られたほうがいいと思います。これが自力でできないなら、その後の処理プログラムも作れないと思います。
(また、バイナリエディタでファイルをながめていると、レイアウトはだいたい予想できることも多いです)
なお、「ビッグ-->リトルの変換さえできればいい」ということなら、Perlのようなスクリプト言語での処理も可能です。
C言語で作るよりもお手軽なので、私は、この手の処理が必要な場合、Perlを使っています。
ちなみにMacは、CPUが68系(モトローラ)のモデルはビッグで、86系(インテル)のモデルはリトルです。個人的には、68系が直交性あるマシン語セットで好きだったんですけどね。
No.3
- 回答日時:
ANo.2さんの言われるとおり、レイアウトが分からないと難しいです。
でも、それを質問者さんはPCで処理したいと思われているのでしょうから、レイアウトを知ることは可能なのではないですか?レイアウトさえわかれば、あとは、short,int,long等のバイトを入れ替える関数を呼び出しながらデータを変換して書き出すプログラムを書けばOKです。charやstringはそのまま書き出します。
C言語では、参照URLにあるような関数を呼び出せば、変換できます。なおネットのデータはビッグエンディアンで流れています。
参考URL:http://wisdom.sakura.ne.jp/system/winapi/winsock …
ありがとうございます。データの種類と個数が分かれば、サイズ×個数でファイルサイズが計算でき、これが実際のファイルサイズと一致すれば処理できると思います。実際には様々なサイズのファイルが混入されているバイナリファイルだったらどうするのかという問題があるように思いますが、どうしたらよいのでしょうか。
また、プログラムの構造としては、
1.ファイルを開く(読み込み、書き込み)
2.変数にデータを読み込む
3.変数変換関数を通す(ntohs(),ntohl(); ビッグ→リトル)
4.変換された変数を書き込みファイルに出力
5. 2,3,4をファイル終了まで繰り返す
6.ファイルを閉じる
という風なプログラムだと思います。具体的なプログラムの書き方を教えて頂きたいのですが。C言語のテキストに載ってそうですけど。私は以前フォートランでやったことはあるのですが。
No.2
- 回答日時:
データレイアウトが分からない以上、エンディアン変換は不可能です。
数値は型により1~8byteの物があり2byte以上の物を変換、さらに文字は変換しません。
自力でレイアウトに合わせて変換するプログラムを作りましょう。
回答、ありがとうございました。ご指摘のことはデータのタイプとかサイズによっていろいろなので普遍的な変換方法はない、ということでしょうか。問題となっているデータは文字ではなく、数字です。私の考えでは8ビットだったら、ABCDEFGH→HGFEDCBAとすれば反転が完了するのではないかということですが、違うでしょうか。±で問題が発生するかも。分かりませんが。ネット上ではエンディアン変換ツールもあるみたいですが、使えるのかなと思案しています。
No.1
- 回答日時:
興味深い話題ですね.
以下の URL が参考になりそうです.
「ビッグエンディアンとリトルエンディアンの意味とその変換方法」
http://digital.ni.com/public.nsf/allkb/008AB70CC …
「[tips]ビッグエンディアンとリトルエンディアン」
http://son-son.sakura.ne.jp/programming/tips.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- ドライブ・ストレージ ハードディスクのデータ回復について 15 2022/08/22 14:55
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- マルウェア・コンピュータウイルス FlashPlayerの削除とマルウェア感染について 5 2023/02/23 20:52
- マルウェア・コンピュータウイルス トロイの木馬が検出されました。 1 2022/06/12 22:09
- フリーソフト .264という動画ファイル 2 2022/07/12 11:30
- Windows 10 renameコマンドでファイル名からアンダースコアを消す方法 5 2023/04/24 13:33
- その他(クラウドサービス・オンラインストレージ) OneDriveの同期ができません。助けてください。 1 2023/06/13 17:02
- Windows 7 Media Playerが開かない。ファイルアイコンを右クリックしても「プロパティ」が表示されない。 2 2023/02/05 14:45
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アリーナ型議会と変換型議会の...
-
緯度・経度の値をエクセルで変...
-
エクセル関数/10進法から60進法...
-
つらそう…を丁寧に言うなら、お...
-
VB.NETで小数点以下の桁数を取...
-
意外に?以外に??どちらが正...
-
miniSD変換アダプタ
-
勝手に無変換になる
-
DMファイルをDXFかDWGに変換で...
-
COのCの酸化数はいくつですか?
-
エクセルで、小数点は、全て切...
-
cdiをisoに変換したいのですが
-
平方メートルの単位の出し方。
-
MP3を楽譜に変換するサイト、ア...
-
Google 日本語入力の調子がおか...
-
土日祝 の正しい読みは
-
漢数字を算用数字に変換したい...
-
エクセル DEC2BIN 範囲外数値の...
-
movをmp4に変換すると白飛びし...
-
NFAからDFAの変換について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
緯度・経度の値をエクセルで変...
-
エクセル関数/10進法から60進法...
-
アリーナ型議会と変換型議会の...
-
MP3を楽譜に変換するサイト、ア...
-
意外に?以外に??どちらが正...
-
つらそう…を丁寧に言うなら、お...
-
教えてgoo!で 回答数 ベストア...
-
PDFファイルのプロパティ内容削...
-
VB.NETで小数点以下の桁数を取...
-
miniSD変換アダプタ
-
Windows Media PlayerからMP3に...
-
韓国料理に詳しい方に質問。韓...
-
DMファイルをDXFかDWGに変換で...
-
名前を数字にしたい。
-
スクリーンショット:文字がぼ...
-
自宅のゲーム機主にレトロゲー...
-
勝手に無変換になる
-
インディアン語で太陽は何て言...
-
単位の リューベ って
-
エクセル DEC2BIN 範囲外数値の...
おすすめ情報