我已经搜索了很多,但找不到在 VB6 中获取 Double 变量内容的十六进制或二进制表示的方法。(双变量是否以 IEEE754 格式保存?)
提供的Hex(x)函数不好,因为它首先对输入进行整数化。因此,如果我想查看 Atn(1) 产生的确切位模式,Hex(Atn(1))不会产生它。
我正在尝试构建一个包含 If 子句的数学函数。我希望能够看到这些边界两侧返回的值尽可能接近一致。
有什么建议么?
我已经搜索了很多,但找不到在 VB6 中获取 Double 变量内容的十六进制或二进制表示的方法。(双变量是否以 IEEE754 格式保存?)
提供的Hex(x)函数不好,因为它首先对输入进行整数化。因此,如果我想查看 Atn(1) 产生的确切位模式,Hex(Atn(1))不会产生它。
我正在尝试构建一个包含 If 子句的数学函数。我希望能够看到这些边界两侧返回的值尽可能接近一致。
有什么建议么?
是的,VB6 使用标准 IEEE 格式的Double
. 一种无需借助memcpy()
技巧即可获得所需内容的方法是使用两个 UDT。第一个将包含一个Double
,第二个是 8 的静态数组Byte
。LSet
包含数组Double
的那个。Byte
然后你可以一个一个地检查每Byte
一个Double
。
如果您需要查看代码,请告诉我们。
[编辑]
在模块级别:
Private byte_result() As Byte
Private Type double_t
dbl As Double
End Type
Private Type bytes_t
byts(1 To 8) As Byte
End Type
然后:
Function DoubleToBytes (aDouble As Double) As Byte()
Dim d As double_t
Dim b As bytes_t
d.dbl = aDouble
LSet b = d
DoubleToBytes = b.byts
End Function
要使用它:
Dim Indx As Long
byte_result = DoubleToBytes(12345.6789#)
For Indx = 1 To 8
Debug.Print Hex$(byte_result(Indx)),
Next
这是空气代码,但它应该给你的想法。