• ベストアンサー

バイナリファイルの計算方法

バイナリデータをはじめて扱う初心者です。 バイナリデータファイルからデータを読み出したいと思います。 環境はWindowsXPとLabView7.1です。 バイナリエディタで見てみると、  E8 03 と格納されている、2バイトshort型のデータがあります。 LabView7.1を使って、E8 03 という配列要素を読み出すことまではできました。 次に、この値を10進数で表現すると、いくつになれば正解なのでしょうか? (E8 03 という値をどのように計算して10進数にすればいいのでしょうか?) 私なりにプログラムした結果、-24か232のどちらかだと思うのですが自信がありません。 (データ自体が計測器が吐き出したデータなので、どのような値が入っているかわからないのです。 LabViewがビックエンディアンを使っていることも、正解に自信が持てない一因です) バイナリエディタで10進数に変換してくれるようなツールがあれば一番いいのですが。 ご存知の方がいらっしゃいましたら、ご教授ください。

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

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

E8 03がどういう値なのかはその計測器の仕様次第なので、その仕様を知らなければ誰にも分からないと思いますが、「E8 03」という数字だけ見ると、リトルエンディアンの03e8hはよく見る値(10進でちょうど1000)ですから、おそらく1000だろうなーとは思います。

chokan
質問者

お礼

ご指摘のとおり、たぶん1000という値が正解だと思います。 やっと、明かりが見えてきました。 ご回答ありがとうございました。

その他の回答 (2)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

1.LabViewがビックエンディアンを使っている。従ってビッグエンディアン形式で格納している。 2.E803は2バイトshort型である。 上記のことが、成立するという前提ですが、その場合は、 -6141になります。符号無し(unsigend short型)なら59395になります。 つまり、short型(符号付き2バイト整数)のE803(ビッグエンディアン形式)は、-6141になります。 ちなみに、E8単独(1バイト)では、符号無しで、232になり、符号付きで、-24となります。但しこれは、1バイトですから、unsigned char型又はchar型に相当します。

chokan
質問者

お礼

説明不足ですみません。 バイナリファイルを吐き出しているプログラムは、たぶんリトルエンディアンで格納しています。 ただし、コンパイルされているため、中身がわからず、データから類推しようとしていた次第です。

  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.1

計測器の吐き出す仕様によると思いますが。 E8が上位バイトなのか、下位バイトなのか。データ長は何バイトなのか、符号ビットはあるのか無いのか又はどこにあるのか。BCDで見ればよいのか、パック形式でデータは格納されているのか。 で全然異なります。 XPなら電卓で10進<->16進変換はできますね。

chokan
質問者

お礼

電卓が利用できるとは、うっかり忘れていました。 普通に、16^3*E+16^2*8+16^1*0+16^0*3 とすればよかったのですね。 仕様がわからないので、データから読み解いていこうと思っていました。

関連するQ&A

  • バイナリデータからの値の取得について教えてください

    今、バイナリデータから値を取りだそうとがんばっています。 しかし、うまくいかずに困っています。 困っていることは2点あります。 (1)バイナリデータにはリトルエンディアンで格納していると書いています。 まず、リトルエンディアンで書かれている場合、どのような処理を考えることが必要なのでしょうか? (2)バイナリデータには、 はじめに文字列(char)型4バイトで「RIFF]という値 次に32ビット符号なし整数で4バイトの数字、 次に4052バイトの構造体 などと収納されているようです。 このように入っているデータから値を取得するにはどのようにしたらよいのでしょうか? 全然できなくて困っています。 教えていただけないでしょうか? よろしくお願いいたします。

  • バイナリファイルの書き出し

    バイナリファイルにデータを書き込むプログラムを作りたいと思っています。実は、Standard MIDI Fileのバイナリファイルを作りたいんです。 SMFについては、今まで、直接バイナリエディタで開き、16進数の数字をいじくって、データ書き換えたりしてたので直接バイナリファイルに16進数での数字を書きたいんです。 たとえば、テキストファイルに903C408360803C0000みたいに吐き出すプログラムでは、バイナリファイルに書き出してからバイナリエディタで開くと こいつがさらに16進数に変換されてしまいますよね? そうならないようにするにはどうやればいいんですか?

  • バイナリエディタ

    PC雑誌でチラッと見たのですが、バイナリエディタとういうのはプログラムデータの0,1の配列を見たり、変えたりするものなんですか?またそれはどうやったら見れるんですか?よろしくお願いします

  • JAVAのdouble型情報をリトルエンディアンでバイナリへ出力の方法

    JAVAでdouble型の情報をリトルエンディアンでバイナリとして出力する方法を教えてください。 現在、java.io.DataOutputStreamを使用し、writeDoubleで出力していますが、ビックエンディアンとしてしか無理でした。 読み込むのはテキスト型で出力がバイナリ。 現在のソースの簡易フローチャートを書いて置きます。 START ↓ テキストファイルから特定の文字列を取得する(1 , 7 , 5.5等) ↓ 取得した文字列をそれぞれ対応の型に変換する int top = Integer.parseInt("1"); int sub = Integer.parseInt("7"); double miks = Double.parseDouble("5.5"); ↓ バイナリのフォーマットに合わせて出力する int型は4バイトでビックエンディアン。 double型は8バイトでリトルエンディアン。 例えば、デフォルトのビックエンディアンで出力した時、数字の1は 00 00 00 01 になりますが、 リトルエンディアンで出力した時は、 01 00 00 00 になると思います。 変換するタイミングとしては、書き込む時にオリジナル機能(メソッド)で書き込むデータ(int型やdouble型)とビックかリトルを指定して、バイナリに出来るものを探しています。 PS 現在の質問はソースを上げるのが一番とは思いますが、社外秘のソースなので、公開することは出来ません。 PPS 私の質問に対する質問があれば、より詳細に答えていくつもりです。 以上、宜しいお願い致します。

    • ベストアンサー
    • Java
  • バイナリから実数を取得したいのですが・・・

    C++にてバイナリデータから倍精度の浮動小数を取得したいと考えています。 バイナリの中にリトルエンディアン形式で倍精度の浮動小数が64ビット幅に収められています。 これをdouble型の変数に代入したいのですが、どうすれば(できれば簡単な方法で)値を代入できるでしょうか? ご教授お願いします。 データのサンプルを念のために記載させて頂きます。 B2 9C 05 DA 7D 40 6C 3F -> 3.448720745086919e-3

  • VBでバイナリエディタを作成について

    VisualBasic6 SP5でバイナリエディタを作成しようとしているのですが、 例えばVariant型に格納したバイナリ文字列を16進表示で表示させたり、その逆の16進数を Variant型の16進数に変換するよい関数はありますか? また、バイナリエディタで良くある右側のテキスト表示ですが、ASCで表示させているだけでしょうか? よろしくお願いいたします。

  • 配列から指定するデータを取り出す方法

    お世話になります。 今、 char buf[1500]に値が入っているのですが、 バイナリデータであり、テキストエディタで バイナリモードでみると、 54,00,00,32,00,00,40,00,FF・・・ となっています。 この3~4バイト目の0x00,0x32のを 10進数にした値を得たいです。 今回の質問点を下記します。 (1)bufに格納されている3・4バイト目の値を得るにはどうしたら  いいのでしょうか?memcpy()などでやるのか? (2)得た値を10進にするにはどうしたらいいでしょうか? どうぞよろしくお願い致します。

  • 数値 バイナリ 保存で保存する方法

    お世話になります。先日からUNICODE と バイナリ形式の保存にはまっています。 10進数 30を16進にすると1E ですが、手元に 1E 00 00 00 とバイナリエディタで 読めるファイルがあります。 このようなファイルを VB で作成するにはどうすれば良いでしょうか。 よろしくお願いいたします。      

  • 数値 バイナリ 保存

    お世話になります。先日からUNICODE と バイナリ形式の保存にはまっています。 10進数 30を16進にすると1E ですが、手元に 1E 00 00 00 とバイナリエディタで 読めるファイルがあります。 このようなファイルを VB で作成するにはどうすれば良いでしょうか。 よろしくお願いいたします。      

    • ベストアンサー
    • Java
  • バイナリファイルの読み込みについて

    java初心者です。 今バイナリファイルの読み込みを行っているのですがバイナリファイルのデータの値とプログラムで読み込んだ値が違っているので困っています。 バイナリファイルはASCIIテキストになっていてデータを見ることができ中身は -0.00012 -0.00009 -0.00009 -0.00012 -0.00009 -0.00009 -0.00009 -0.00012 ・・・・・・・(値が続くという意味です) となっています。 作ったプログラムは import java.io.*; class a { public static void main(String[] args) { try { FileInputStream in = new FileInputStream("file name"); int ch; while ((ch = in.read()) != -1) { System.out.println(ch); } in.close(); } catch (IOException e) { System.out.println(e); } } } で作って読み込んでみたのですが出力された値は 45 48 46 48 48 48 49 50 ・・・・・・ になってしまいます。 どのようにしたら値が等しくなるのでしょうか。教えてください。

    • ベストアンサー
    • Java