【问题标题】:How can I see the actual binary content of a VB6 Double variable?如何查看 VB6 Double 变量的实际二进制内容?
【发布时间】:2020-04-13 19:25:29
【问题描述】:

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

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

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

有什么建议吗?

【问题讨论】:

  • 调试器不能显示这个吗? (我没有安装VB6,因为它来自古代)
  • 在 .NET 中可能/在 VB6 中可用的类似事情:docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/…。不是二进制表示,但如果你只是在做数学运算,那么你可能不需要那个,你只需要类型的所有精度

标签: vb6 internal-representation


【解决方案1】:

是的,VB6 使用Double 的标准 IEEE 格式。在不借助memcpy() 技巧的情况下获得所需内容的一种方法是使用两个 UDT。第一个包含一个Double,第二个包含8 个Byte 的静态数组。 LSet 包含Double 的那一个到包含Byte 数组的那一个。然后您可以从Double 中逐个检查Byte。

如果您需要查看代码,请告诉我们。

[编辑]

在模块级别:

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

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

【讨论】:

  • 亲爱的吉姆,你遥遥领先!! :-) 什么是“UDT”?您能否在以下位置填写一些此类函数的代码:- Public Function DoubleToHex(ByVal D as Double) as String .... DoubleToHex = ... ' 魔法!! :-) 结束函数'DoubleToHex
  • @Wojja62 - 我知道这并不完全符合您的要求,但它可以作为如何做到这一点的示例。
  • UDT:用户定义类型。 @JimMack:好主意。我现在又想起了,为什么我如此喜欢 VB6,但仍然很难过 M$ 用“VB”.NET 杀死了它。
猜你喜欢
  • 2011-08-07
  • 2018-10-08
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
相关资源
最近更新 更多