最近有个需求,需要将32位单精度十进制浮点数转换为其对应的内存中存储形式(IEEE-754标准)的8个十六进制字符串。此时的情景是数据量有点大并且需要记录在excel文件中。当在一个单元格中输入单精度浮点数时,在相应的单元格中自动生成8个十六进制字符串。别人推荐用EXCEL VBA来编程解决。
下面32位单精度十进制浮点数转换为其对应的内存中存储形式(IEEE-754标准)的8个十六进制字符串的转换函数来至于这里。接下来的part1和part2是等价的代码,选择其中一个即可。这里的Type关键字类似于C语言中的typedef关键字。这里也就是相当于定义了两个C语言中的结构体类型 uLng和uFlt。这里的这个操作是为了能够将一个浮点数赋值给一个整型数(对应于语句:LSet ul = uf)。part1中的冒号是为了将多行写在一行上。参考于这里。
===============================================================================
/*part1*/
Type uLng: l As Long: End Type
Type uFlt: f As Single: End Type
===============================================================================
/*part2*/
Type uLng
l As Long
End Type
Type uFlt
f As Single
End Type
===============================================================================
Function Float2Hex(s As Single) As String
Const sPad As String = "00000000"
Dim uf As uFlt
Dim ul As uLng
uf.f = s
LSet ul = uf
Float2Hex = Right(sPad & hex(ul.l), 8)
End Function