1

我已经搜索了很多,但找不到在 VB6 中获取 Double 变量内容的十六进制或二进制表示的方法。(双变量是否以 IEEE754 格式保存?)

提供的Hex(x)函数不好,因为它首先对输入进行整数化。因此,如果我想查看 Atn(1) 产生的确切位模式,Hex(Atn(1))不会产生它。

我正在尝试构建一个包含 If 子句的数学函数。我希望能够看到这些边界两侧返回的值尽可能接近一致。

有什么建议么?

4

1 回答 1

3

是的,VB6 使用标准 IEEE 格式的Double. 一种无需借助memcpy()技巧即可获得所需内容的方法是使用两个 UDT。第一个将包含一个Double,第二个是 8 的静态数组ByteLSet包含数组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

这是空气代码,但它应该给你的想法。

于 2019-12-22T03:06:58.580 回答