none
バイナリを10進数に変換するには? RRS feed

  • 質問

  •  

    プログラミング初心者のため上手な表現ができないかと思いますがご了承ください。

     

    素材の寸法を収めたバイナリファイルが手元にあり、これをもとに集計プログラムを作りたいと考えています。

    バイナリは単精度浮動小数点型(IEEE 754)であることがわかりました。

    IEEE754仕様にそって実際に手計算で10進に直してみると思った数値が求まります。

    そこで質問の本題ですが、

    バイナリ文字列をSingle型の変数へ代入する関数のようなものはあるのでしょうか?

    やはり手計算したようなコードを書いて求めたものを代入するしかないのでしょうか?

    みなさん、宜しくお願いします。

    2008年1月28日 1:39

回答

  • System.IO.BinaryReader の ReadSingle とか、System.BitConverter の ToSingle とか。

    // バイナリ文字列?

    2008年1月28日 2:11
  • 「素材の寸法を収めたバイナリファイル」とか「バイナリ文字列」って表現がよくわかりませんね。実際にはどういう値がファイルに入ってるんでしょうか?

    2008年1月28日 2:47
  • 外池と申します。

     

    要するに、.Net Frameworkにおいては、浮動小数点数の内部表現はIEEE754に準拠しているので、標準に準備されているメソッドで問題なく変換可能だと思います。

     

    ただし、一点だけご注意ください。

     

    Windowsは標準でリトルエンディアン形式であり、.Net Frameworkについてこれを前提に動作しますが、ソフトウェアによってはビッグエンディアン形式でファイルに書き込まれている場合もあります。

     

    単精度浮動小数点数は、4バイトのバイナリーで表現されますが、仮に、B1、B2、B3、B4だとしましょう。これが、ファイル上でも、B1、B2、B3、B4の順に書かれているか、もしかるすと、逆順のB4、B3、B2、B1になっているか、よくご確認ください。

     

     

    2008年1月28日 5:09
  • こんにちは。中川俊輔 です。

     

    Hongliangさん、囚人さん、外池さん、大変参考になる回答ありがとうございます。

     

    Kazuさん、フォーラムのご利用ありがとうございます。

    問題が解決されたようなので、Hongliangさん、外池さんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    問題解決につながる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    Kazuさんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2008年2月5日 4:21

すべての返信

  • System.IO.BinaryReader の ReadSingle とか、System.BitConverter の ToSingle とか。

    // バイナリ文字列?

    2008年1月28日 2:11
  • 「素材の寸法を収めたバイナリファイル」とか「バイナリ文字列」って表現がよくわかりませんね。実際にはどういう値がファイルに入ってるんでしょうか?

    2008年1月28日 2:47
  •  

    早速の返信ありがとうございます。

    補足させていただきます。

    バイナリエディタで表示した場合、例を挙げると「79E9F642」の様に16進数で表示されます。

    10進数では「123.456」(Single型)を意味します。

    何らかの方法で「79E9F642」をSingle型変数に直接代入できるのではないかと思った次第です。

    ご指摘ありがとうございます。

    2008年1月28日 3:12
  •  Hongliang さんからの引用

    System.IO.BinaryReader の ReadSingle とか、System.BitConverter の ToSingle とか。

    // バイナリ文字列?

    Hongliangさんありがとうございます。

    早速調べてみます。

    2008年1月28日 3:14
  • 外池と申します。

     

    要するに、.Net Frameworkにおいては、浮動小数点数の内部表現はIEEE754に準拠しているので、標準に準備されているメソッドで問題なく変換可能だと思います。

     

    ただし、一点だけご注意ください。

     

    Windowsは標準でリトルエンディアン形式であり、.Net Frameworkについてこれを前提に動作しますが、ソフトウェアによってはビッグエンディアン形式でファイルに書き込まれている場合もあります。

     

    単精度浮動小数点数は、4バイトのバイナリーで表現されますが、仮に、B1、B2、B3、B4だとしましょう。これが、ファイル上でも、B1、B2、B3、B4の順に書かれているか、もしかるすと、逆順のB4、B3、B2、B1になっているか、よくご確認ください。

     

     

    2008年1月28日 5:09
  • 皆さんの情報を参考に問題は解決しました。

    ありがとうございました。

    またよろしくお願いします。

    2008年1月28日 22:26
  • こんにちは。中川俊輔 です。

     

    Hongliangさん、囚人さん、外池さん、大変参考になる回答ありがとうございます。

     

    Kazuさん、フォーラムのご利用ありがとうございます。

    問題が解決されたようなので、Hongliangさん、外池さんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    問題解決につながる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    Kazuさんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2008年2月5日 4:21
  •  

    中川俊輔様

    ご指摘ありがとうございます。

    2008年2月14日 0:57