在java中将十六进制转换为纬度和经度时出错
十六进制字符串->090bc3b3ed1b479c 我想把它转换成经纬度。实际产量为 纬度十六进制::090bc3b3 纬度:42.1572052777784 经度十六进制::ed1b479c 经度:::-88.049805555 当我试图转换成整数值时,我得到NumberFormatException。以下是我正在编写的代码: 我得到异常我转换经度十六进制字符串为整数在java中将十六进制转换为纬度和经度时出错,java,latitude-longitude,numberformatexception,Java,Latitude Longitude,Numberformatexception,十六进制字符串->090bc3b3ed1b479c 我想把它转换成经纬度。实际产量为 纬度十六进制::090bc3b3 纬度:42.1572052777784 经度十六进制::ed1b479c 经度:::-88.049805555 当我试图转换成整数值时,我得到NumberFormatException。以下是我正在编写的代码: 我得到异常我转换经度十六进制字符串为整数 public String getLatitude(String hex) { int latStart=0
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);
}
我也尝试了Long,但得到的结果是:经度:1104.9966655555554问题在于解析负值。使用090bc3b3ed1b479c字符串作为输入,您可能会得到NumberFormatException:对于输入字符串:ed1b479c,因为该数字太大,无法存储在int中 Java 8添加了Integer.parseUnsignedInt,这将解决您的问题,更改为无符号转换后的输出:
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);
}
请注意,Integer.parseUnsignedInt仍将返回带符号的int,但它会将输入字符串视为无符号
编辑:
对于Java 8之前的版本,问题:
latitude Hex::090bc3b3
Hex to float>>>151765.939
Lat: 42.157205277777784
Longitude Hex::ed1b479c
Hex to float>>>-316979.3
Lon: -88.04980555555555
为什么您的参数在第二个getLongiture方法中命名为base64?您使用的是base64编码吗?我得到的输入是转换为十六进制字符串的base64字符串。。我比较了编码前和解码后base64的十六进制字符串,看起来不错。但问题在于将十六进制字符串转换为带符号的十进制值。我现在已经将变量名更改为hex。java 7中有解决方案吗?我目前正在使用java 7
int value = (int) Long.parseLong(yourSringHere, 16);