倍精度浮動小数点への変換について

タグの編集
投稿者 シン  (社会人) 投稿日時 2011/3/30 19:42:28
バイナリダンプを勉強しています。

16進ダンプで
0A D7 A3 70 3D 4A 3D 40
の8バイトが、倍精度浮動小数点型の値の
29.290000
を指しているようなのですが、その変換の仕方がわかりません。
LittleEndianと思っていますが、
Convert.ToDoubleメソッドを使おうとしても、欲しい値にはならなくて困っています。

ご指導をお願いいたします。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/3/30 20:48:37
こんな感じで。
Dim bin() As Byte = {&H0A, &HD7, &HA3, &H70, &H3D, &H4A, &H3D, &H40}
Dim dbl As Double = BitConverter.ToDouble(bin, 0)

投稿者 shu  (社会人) 投稿日時 2011/3/30 21:03:23
Stream版です

Import System.IO

'--- 読み
        Dim bytData() As Byte = {&HA, &HD7, &HA3, &H70, &H3D, &H4A, &H3D, &H40}

        '--- MemoryStreamはFileStreamとかでもよい
        Dim brd As New BinaryReader(New MemoryStream(bytData))

        Dim dblTmp = brd.ReadDouble()


'--- 書き
        Dim stm As New MemoryStream   '--- FileStreamとかでもよい
        Dim bwt As New BinaryWriter(stm)
        bwt.Write(29.29)
        bwt.Flush()

        Dim bytData2() As Byte = mem.ToArray()
投稿者 シン  (社会人) 投稿日時 2011/3/31 00:05:46
魔界の仮面弁士 さん、ありがとうございます。
BitConverterクラスという、ぴったりのものがあったのですね。
あっけにとられてしまいました。

shuさんもありがとうございます。
こちらも、BinaryReaderクラスに、ReadDoubleメソッドという、これまたぴったりのもので、びっくりしました。

おかげさまで、解決することができました。
本当にありがとうございました。