将十六进制转换为十进制(Lat / Lon)?

时间:2016-08-17 23:54:34

标签: java hex decimal latitude-longitude

我得到了十六进制的纬度和经度值:

0AF6CF83
D89B2933

将它们转换为十进制我得到了......

 183947139
-660920013

问题是,如何使用Java获取以下格式的小数?

 18.3947139
-66.0920013

这就是我实际将十六进制转换为十进制的方式:

public static int hex2Decimal(String s) {
    long longValue = Long.parseLong(s, 16);
    int intValue = (int)longValue;
    return intValue;
}

2 个答案:

答案 0 :(得分:3)

您需要首先将十六进制值解析为int,然后将其乘以1e-7 (加倍乘以1e-7除以{{1} }}) 除以1e7 感谢@RolandIllig提出的pointing out精度问题。

但是,Integer.parseInt()不允许将8位十六进制值解析为负整数值,即高位开启时。

在Java 8中,你可以这样做:

1e7

如果您的代码需要在8之前的Java版本上运行,请执行以下操作:

public static double hex2Decimal(String s) {
    return Integer.parseUnsignedInt(s, 16) / 1e7;
}

测试

public static double hex2Decimal(String s) {
    return (int)Long.parseLong(s, 16) / 1e7;
}

输出

System.out.println(hex2Decimal("0AF6CF83"));
System.out.println(hex2Decimal("D89B2933"));

答案 1 :(得分:0)

第一个数字看起来非常简单:只需将int结果除以10.0e6,即1000万。