如何从 *.dbl/*.mt4 获取值

how to get values from *.dbl/*.mt4

提问人:sergii.gudym 提问时间:7/21/2023 最后编辑:sergii.gudym 更新时间:7/21/2023 访问量:36

问:

我从示波器接收了 64 位双精度 (.dbl) 或“测量数据”(.mt4) 格式的数据。如何解析它(最好是 Java 或 Kotlin)或在哪里可以找到这种格式的文档?

我尝试使用DataInputStream.readDouble,但结果很奇怪

C5 12 52 9B EC 3F 12 C0 17 29 E9 87 4E 71 12 C0 6A 3F 80 74 B0 A2 12 C0 B8 39 8E 9E B1 37 12 C0 17 29 E9 87 4E 71 12 C0 C5 12 52 9B EC 3F 12 C0 4E 8D F8 7A 3A 92 12 C0 AA 60 CA A1

Java Kotlin 文件InputStream 示波器

评论

1赞 JensV 7/21/2023
这听起来不像是标准文件格式,我们可能需要知道这是哪个示波器并获取相关文档。该文件的示例也可能有所帮助
0赞 sergii.gudym 7/21/2023
我没有应用程序。一个朋友给我发了一个文件。有几种格式,现在我看了一下,有一个选项 *.mt4
0赞 Jorn 7/21/2023
也许你的朋友可以给你足够的关于示波器的信息,这样你就可以了解如何解析文件。
0赞 g00se 7/21/2023
为什么不发布文件的链接?
1赞 g00se 7/21/2023
前八个值作为双精度值,little-endian:大端值很疯狂-4.56, -4.61, -4.66, -4.55, -4.61, -4.56, -4.64, -4.55 ;)

答:

3赞 g00se 7/21/2023 #1

你可以用这个来阅读它。这些值符合您的期望:

import java.nio.ByteBuffer;
import static java.nio.ByteOrder.*;
import java.nio.file.Path;
import java.nio.file.Files;
import java.io.InputStream;

public class Doubler {
    public static void main(String[] args) throws Exception {
        int count = -1;
        byte[] buff = new byte[8];
        ByteBuffer bb = ByteBuffer.allocate(8).order(LITTLE_ENDIAN);
        try (InputStream in = Files.newInputStream(Path.of(args[0]))) {
            while ((count = in.read(buff)) > -1) {
                bb.put(buff);
                bb.rewind();
                System.out.printf("%.2f%n", bb.getDouble());
                bb.rewind();
            }
        }
    }
}