我想知道如何解码在VB6中写入二进制文件的自定义类型的三维动态数组。
自定义类型定义如下:
Type XYByte
X As Byte
Y As Byte
End Type
表示一个接触点的两个坐标
三维数组表示预先计算的迷你高尔夫球轨道浮雕接触点位置。轨道被视为二维高度图。对于地图上的每个可能的球位置,计算接触点,因为地图坐标可以有更多的接触点,因此是第三维。
Dim ContactPointMap() As XYByte
ReDim ContactPointMap(Width - 1, Height - 1, MaxContactPointCount - 1)
该数组被保存到包含该轨道形状的二进制文件中。
Open FileName For Binary As #1
...
Put #1, , ContactPointMap()
...
Close #1
好的,这就是我在VB6中做的。现在我在FPC/Lazarus中重新编写了迷你高尔夫模拟器,想知道如何破译由VB6编写的三维数组数据。
有趣的是,读取"Single"精度浮点值的二维数组非常简单,我将其用作地形图本身,并作为接触点计算的来源:
Dim Map() As Single
ReDim Map(Width - 1, Height - 1)
数据按逻辑顺序保存。我能识别行和列,阅读也很顺利。
但是通过三维接触点图,每次读取它的尝试都失败了。我使用了hexeditor来查看二进制数据,它以一种我无法理解的方式存储。
好的,我已经可以读取地面图,作为备份选项,我可以在FPC中重新计算接触点,更改格式并以非加密的方式保存接触点图。顺便说一句,我将这些信息存储在轨道文件中只是出于速度原因(在播放时读取数组比计算它要快)。
我不再有访问VB6。我只有代码和编译后的可执行文件。
但是有谁知道我该如何破译一个由VisualBasic 6编写的用户定义类型的三维动态数组?
这表明我在研究中使用了损坏的数据。
我有不好的尺寸
我不清楚我的算法中的维度顺序。
只将数组数据保存到文件中,首先对第一个维度进行编码,然后对第二个维度进行编码,依此类推。
三维数组的编码与其他多维数组的编码一样简单。
Marco van de Voort的这个链接帮助了我:http://www.codeguru.com/vb/gen/vb_misc/algorithms/article.php/c7495/How-Visual-Basic-6-Stores-Data.htm