[[20090827104022]] 『浮動小数点について』(あきこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『浮動小数点について』(あきこ)

エクセルで4バイト16進数の値を単精度浮動小数点表示で表示してあげたいです。
どなたか方法をご存じないでしょうか?

例(計算は適当です)

 ABCDEF01 ―(変換)→ 4.956524684…

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


 (-1)^符号部×2^指数部-127×(1+仮数部)
 符号部:bit31
 指数部:bit23〜bit30
 仮数部:bit0〜bit22

 ビット演算とかして変換してあげれば。。。


 アドインの分析ツールを使います。チェックしてください。

 Type hhex
   h(1 To 4) As Byte
 End Type
 Type mysingle
   s As Single
 End Type
 Dim hhh As hhex
 Dim sss As mysingle
 Sub main()
    Dim hh As String
    hh = "43960000" '←ヘキサイメージの4バイト分
    For i = 4 To 1 Step -1
       hhh.h(i) = Evaluate("hex2dec(""" & Mid(hh, (4 - i) * 2 + 1, 2) & """)")
    Next
    LSet sss = hhh
    MsgBox sss.s
 End Sub

 この場合、300と表示されるはず・・・。

 出かけるので変数名や配置がいい加減ですが。

 ichinose


 昼間は、いい加減に作ってしまったので再度・・・・。

 標準モジュールに

 '==========================================================
 Sub main()
    MsgBox cnv_hextosin("43960000")
    MsgBox cnv_hextosin("4007DF3B")
    MsgBox cnv_hextosin("451C4000")
 End Sub

 別の標準モジュールにヘキサ文字列----->Singleデータ変換関数

 '=====================================================================
 Option Explicit
 Type myhex
   hx(1 To 4) As Byte
 End Type
 Type mysingle
   sgl As Single
 End Type
 Function cnv_hextosin(ByVal hexstr As Variant) As Single
    Dim g0 As Long
    Dim h_tr As myhex
    Dim s_tr As mysingle
    Dim h_array As Variant
    h_array = Array("0", "1", "2", "3", "4", "5", "6", _
                  "7", "8", "9", "A", "B", "C", "D", "E", "F")
    With Application
       For g0 = LBound(h_tr.hx()) To UBound(h_tr.hx())
          h_tr.hx(g0) = .Match(UCase(Mid(hexstr, (UBound(h_tr.hx()) - g0) * 2 + 2, 1)), h_array, 0) - 1 _
                      + (.Match(UCase(Mid(hexstr, (UBound(h_tr.hx()) - g0) * 2 + 1, 1)), h_array, 0) - 1) * 16
       Next
    End With
    LSet s_tr = h_tr
    cnv_hextosin = s_tr.sgl
 End Function

 これでmainを実行して見てください。
 因みに

    MsgBox cnv_hextosin("43960000") '300
    MsgBox cnv_hextosin("4007DF3B") '2.123
    MsgBox cnv_hextosin("451C4000") '2500
 となります。

 16進文字列は、必ず8文字構成で指定してください。

 例 1   ----->00000001
    abc    -----> 00000abc

 尚、今度のコードは、アドインの分析ツールは、要りません。

 ichinose


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.