繁体   English   中英

Java中将十六进制转换为纬度和经度时出错

[英]error while converting hexadecimal to latitude and longitude in java

 public String getLatitude(String hex) {
        int latStart=0;
        String str09 = hex.substring(latStart,latStart+8);
        System.out.println("latitude Hex::"+str09);
        Integer outDec = Integer.parseInt(str09, 16);
        double d = outDec / new Double(1000);
        System.out.println("Hex to float>>>" + d);
        double lat = d /`enter code here` 3600;
        return String.valueOf(lat);
    }

public String getLongitude(String hex) throws Exception {
    int lonStart=8;
    String str09 = hex.substring(lonStart,lonStart+8);
    System.out.println("Longitude Hex::"+str09);
    Integer outDec = Integer.parseInt(str09,16);
    double d = outDec / new Double(1000);
    System.out.println("Hex to float>>>" + asHex);
    double lon = d / 3600;
    return String.valueOf(lon);
} 

十六进制字符串-> 090bc3b3ed1b479c

我正在尝试将其转换为纬度和经度。 实际输出为纬度Hex :: 090bc3b3纬度::: 42.157205277777784

经度十六进制:: ed1b479c经度:::-88.04980555555555

尝试转换为Interger值时,出现NumberFormatException。 这是我正在处理的代码:

我遇到异常,正在将经度十六进制字符串转换为Interger。

public String getLongitude(String hex) throws Exception {
    int lonStart=8;
    String str09 = hex.substring(lonStart,lonStart+8);
    System.out.println("latitude Hex::"+str09);
    System.out.println("Longitude Hex::"+str09);
    Long outDec = Long.parseLong(str09, 16);
    double d = outDec / new Double(1000);
    System.out.println("Hex to float>>>" + d);
    double lon = d / 3600;
    return String.valueOf(lon);
}

我也尝试过Long,但这是我得到的:longitude :::: 1104.9966655555554

问题在于解析负值。 使用090bc3b3ed1b479c字符串作为输入,您可能会遇到NumberFormatException: For input string: "ed1b479c"因为该数字太大而无法存储在int

Java 8添加了Integer.parseUnsignedInt() ,它将解决您的问题,在更改为无符号转换后输出:

latitude Hex::090bc3b3
Hex to float>>>151765.939
Lat: 42.157205277777784

Longitude Hex::ed1b479c
Hex to float>>>-316979.3
Lon: -88.04980555555555

请注意, Integer.parseUnsignedInt()仍将返回带符号的 int ,但会将输入字符串视为无符号。

编辑:

对于Java 8之前的版本, 问题如下:

int value = (int) Long.parseLong(yourSringHere, 16);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM