倍精度浮動小数点への変換について への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 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()
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/30 20:48:37
こんな感じで。
Dim bin() As Byte = {&H0A, &HD7, &HA3, &H70, &H3D, &H4A, &H3D, &H40}
Dim dbl As Double = BitConverter.ToDouble(bin, 0)
投稿者 シン  (社会人)
投稿日時
2011/3/30 19:42:28
バイナリダンプを勉強しています。
16進ダンプで
0A D7 A3 70 3D 4A 3D 40
の8バイトが、倍精度浮動小数点型の値の
29.290000
を指しているようなのですが、その変換の仕方がわかりません。
LittleEndianと思っていますが、
Convert.ToDoubleメソッドを使おうとしても、欲しい値にはならなくて困っています。
ご指導をお願いいたします。
16進ダンプで
0A D7 A3 70 3D 4A 3D 40
の8バイトが、倍精度浮動小数点型の値の
29.290000
を指しているようなのですが、その変換の仕方がわかりません。
LittleEndianと思っていますが、
Convert.ToDoubleメソッドを使おうとしても、欲しい値にはならなくて困っています。
ご指導をお願いいたします。
BitConverterクラスという、ぴったりのものがあったのですね。
あっけにとられてしまいました。
shuさんもありがとうございます。
こちらも、BinaryReaderクラスに、ReadDoubleメソッドという、これまたぴったりのもので、びっくりしました。
おかげさまで、解決することができました。
本当にありがとうございました。