【问题标题】:error while converting hexadecimal to latitude and longitude in java在java中将十六进制转换为纬度和经度时出错
【发布时间】:2014-09-12 13:13:47
【问题描述】:
 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

当我尝试转换为整数值时,我得到了 NumberFormatException。这是我正在处理的代码:

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

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

【问题讨论】:

  • 为什么你的论点在第二个getLongiture方法中被命名为base64?你用的是base64编码吗?
  • 我将输入作为 base 64 字符串转换为十六进制字符串。我在编码之前和解码 base64 之后比较了十六进制字符串,看起来不错。但问题在于将十六进制字符串转换为有符号十进制值。我现在已将变量名称更改为十六进制。

标签: java latitude-longitude numberformatexception


【解决方案1】:

问题在于解析负值。使用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,但它会将输入字符串视为无符号。

编辑:

对于 pre-Java 8,来自this 问题:

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

【讨论】:

  • 在 java 7 中有解决方案吗..我目前正在使用 java 7
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2010-11-11
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 2013-11-27
相关资源
最近更新 更多