[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『浮動小数点について』(あきこ)
エクセルで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.