Java: float 到十六进制和反转

标签 java floating-point hex data-conversion modbus

嘿嘿,

我有一个小问题。所以我得到了一个测量设备,并通过 modbus 检索数据。我通常通过显示正确数据的“简单 Modbus TCP 客户端”检查值。现在我想自动化这个给我带来麻烦的过程。

我得到了正确的响应,但棘手的部分似乎是转换。我得到了相同的十六进制响应,但是当我转换它时,我不会得到相同的结果。

看一下截图Simply Modbus Client - Screenshot

您可以在左侧看到响应,在右侧看到字节 (4175 AF8A) 以及相应的值 (22739113)。我希望“字节”是十六进制表示,但我不能将它们转换成十进制数。

我编写了一个小的 java 程序来显示这些数字及其转换。

public static void main(String[] args) {

    HashMap<String, Integer> values = new HashMap<>();
    values.put("4175AF52", 22738214);
    values.put("41D61FAC", 1484698204);
    values.put("419A08A0", 109193237);

    Iterator it = values.entrySet().iterator();
    while (it.hasNext()) {
        System.out.println("/************************************************/");
        Map.Entry pair = (Map.Entry) it.next();
        int hexIntepretation = (int) Long.parseLong((String) pair.getKey(), 16);

        // Print the result
        System.out.println(pair.getKey() + " = " + pair.getValue());
        System.out.println("Expected:\t" + pair.getValue());
        System.out.println("Hex to Int:\t" + hexIntepretation);
        System.out.println("Int to Hex:\t" + Integer.toHexString((int) pair.getValue()));
        System.out.println("Float to Hex:\t" + Float.toHexString((int) pair.getValue()));
        System.out.println("Hex to Int:\t" + Integer.parseInt((String) pair.getKey(), 16));

        it.remove(); // avoids a ConcurrentModificationException
    }
}

运行这个代码片段会得到这个输出:

/*******************************************/
419A08A0 = 109193237
Expected:       109193237
Hex to Int:     1100613792
Int to Hex:     6822815
Float to Hex:   0x1.a08a06p26
Hex to Int:     1100613792
/*******************************************/
41D61FAC = 1484698204
Expected:       1484698204
Hex to Int:     1104551852
Int to Hex:     587eb25c
Float to Hex:   0x1.61facap30
Hex to Int:     1104551852
/*******************************************/
4175AF52 = 22738214
Expected:       22738214
Hex to Int:     1098231634
Int to Hex:     15af526
Float to Hex:   0x1.5af526p24
Hex to Int:     1098231634

无论我做什么,我都无法获取值。但是当我做“float-to-hex”时,我会在那里找到一些初始值。

例子:

4175AF52 = 22738214

float 到十六进制:0x1.5af526p24

但我无法将各个部分拼在一起来解决这个难题。感谢您的帮助!

最佳答案

它说“64 位 float ”,但 GUI 只显示 32 位。显然,该 View 将其他 4 个字节切掉,但在左侧的字段中,您可以看到它们。

正如您已经提到的,当您从“字节”列复制所有内容时,您还会得到“丢失”的内容。

关于Java: float 到十六进制和反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38198474/

相关文章:

C - 比较 float 和 if 语句

c# - 如何将 gi-normous 整数(字符串格式)转换为十六进制格式? (C#)

java - 检查字符串是否按字母顺序排列的最佳方法?

java - 在java中分割文件

c++ - Haversine公式-数学略有偏离,不确定为什么

c - 循环遍历 C 中的一系列 float

c# - 为什么我应该在使用三元运算符时将十六进制值显式转换为字节?

java - 无法解码 JavaScript 工具提示中的十六进制值

Java:将 GET PUT POST 发送到外部 API 并获得响应

java - 在 Java 中将多个 ArrayList 保存/加载到一个文件中