[英]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.