【问题标题】:Read VB 5.0 binary files with Java使用 Java 读取 VB 5.0 二进制文件
【发布时间】:2011-06-20 11:20:47
【问题描述】:

我有一个用 Visual Basic 5.0 制作的程序创建的二进制文件。该文件仅包含一组来自 Visual Basic 世界的 Long 值。我知道 Visual Basic 5.0 中的Long 大小为 4 个字节,但我不知道字节顺序。

我尝试使用各种“读取”方法使用 DataInputStream 解析文件,但我似乎得到了“错误”(即负数)值。

如何阅读并使用 Java 正确解释它? Visual Basic 5.0 中 Long 的字节顺序是什么?

以下是我正在尝试使用的某种代码;我正在尝试阅读 2 个 Long 并在屏幕上打印出来,然后再阅读 2 个等。

    try {
        File dbFile = new File(dbFolder + fileINA);
        FileInputStream fINA = new FileInputStream(dbFile);
        dINA = new DataInputStream(fINA);
        long counter = 0;

        while (true) {
            Integer firstAddress = dINA.readInt();
            Integer lastAddress = dINA.readInt();

            System.out.println(counter++ + ": " + firstAddress + " " + lastAddress);
        }
    }
    catch(IOException e) {
        System.out.println ( "IO Exception =: " + e );
    }

【问题讨论】:

  • 4 个字节在 Java 中表示一个 int,并且 Java 中的所有原语都是有符号的,所以即使你看到负值它仍然是正确的。
  • 如果您发布了您使用的实际代码以及您得到的错误结果,它会更容易帮助您。
  • Gabe:发布了我正在尝试使用的代码。
  • 好的,很好。现在,如果您知道结果应该是什么,您可以发布示例输入以及不正确的输出以及您希望输出的内容,我们可以准确地告诉您出了什么问题。

标签: java vb5


【解决方案1】:

由于 VB 在 x86 CPU 上运行,它的数据类型是 little-endian。另外请注意,VB 中的 Long 与 Java 中的 int 大小相同。

我会尝试这样的:

int vbLong = ins.readUnsignedByte() +
             (ins.readUnsignedByte() << 8) +
             (ins.readUnsignedByte() << 16) +
             (ins.readUnsignedByte() << 24);

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2014-12-19
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多