gpt4 book ai didi

java - 从 Java 随机访问 VB6 二进制数据

转载 作者:行者123 更新时间:2023-11-29 09:12:48 26 4
gpt4 key购买 nike

我正在尝试用 Java 编写分布式应用程序,但我正在编写的程序正在替换 VB6 等效程序。使用的数据文件是包含使用 VB6 put 方法编写的二进制数据的实时文件,并且经常被多个应用程序使用。

通过将整条记录(160 字节)读入字节数组 buf,我已成功地从文件中检索到文本。然后使用以下行提取文本字段

new String(Arrays.copyOfRange(buf, 15, 40), "ISO-8859-1");

我还需要提取 VB6 数据类型 Boolean、Double、Integer、Long 和 Single。最终我可能也需要 datetime 但不是第一阶段。要做 double ,我知道字节顺序是小字节序而不是 VB6 中的大字节序,所以我有以下函数

public static double toDouble(byte[] bytes) {
return ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getDouble();
}

前几个数据字段是strings,然后是2 double,此时输出为:

Barcode: 1            
Dept Code: 18
Description: MISC NON VAT
Trade Price: 0.0
Retail Price: 0.009999999776482582

如您所见,前 3 个是合乎逻辑的,并且与数据文件中的内容相匹配。交易价格应该是 0.0,这样没问题,但零售价应该是 0.01,如果我四舍五入是正确的,但是,A。我对四舍五入的价格和增值税信息感到不舒服,B。我不能合理地将任何更改写回文件,就好像我正在阅读有边距或错误一样,那么我可能会以相同的误差范围写入。我也尝试过手动移位,但是如果我尝试移位超过 31 位,我当然需要这样做才能达到 56 位,但对于双重 Java 会提示。

如有任何帮助,我们将不胜感激

最佳答案

如果我尝试这样做,我想我会编写一个 VB6StreamReader,它封装 VB6 基元的读取并处理数据中的怪癖,这些怪癖是由通过 VB6 中的 Put 写入数据的方式产生的。

关于舍入,大多数 float 都按照您描述的方式表示。您是否担心 VB6 以非标准方式对 float 进行编码? Visual Basic 使用 IEEE 754。


有用的 IEEE-754 计算器:http://babbage.cs.qc.cuny.edu/IEEE-754/

关于java - 从 Java 随机访问 VB6 二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11346149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com