我有一个 intel hex格式的字符串,需要将其转换为十六进制格式,然后从那里转换为十进制格式。数据从gps设备发送。
这是我应该得到的结果
Intel hex : 85630800 (input)
device hex : 00086385
decimal : 549765
我怎么能得到这个?
我试图将英特尔十六进制转换为二进制(因为英特尔十六进制是二进制的ascii代表)和二进制转换为十六进制但它没有给我输入值85630800(intelhex)的值00086385(十六进制)
我现在正在查看此库Java Intel十六进制解析器https://github.com/j123b567/java-intelhex-parser
但是这涉及将英特尔十六进制文件转换为二进制格式而不是字符串。我试图看看我是否可以使用代码(部分或全部),但它似乎真的有点过分。
同时查看Convert Intel HEX file to binary file,但它适用于python。
一旦我将它转换为普通十六进制,我可以使用Integer.ParseInt()或Long.ParseInt()作为十进制。
但是我无法将intel十六进制字符串转换为普通十六进制格式。有没有办法将英特尔十六进制字符串转换为正常的十六进制字符串或java中的值?
更新
在阅读完答案后,我意识到正确的问题是如何将Little endian十六进制字符串转换为Big endian。我所拥有的GPS设备的文档,指定格式为 intel hex (可能是因为基于Intel的处理器是小端),这使我无法理解我拥有的数据格式。
答案 0 :(得分:4)
Integer的能力可以提供帮助,第一类应该读取javadoc。
int input = (int) Long.parseLong("85630800", 16); // 0x85630800
int result = Integer.reverseBytes(input);
由于十六进制字符串可能大于 signed int值,因此最好使用long。
答案 1 :(得分:2)
如果您需要将little-endian十六进制字符串转换为big-endian十六进制字符串,则可以从以下代码段开始。根据您需要在大图中解决的问题,可能需要进行一些调整。
String s = "85630800";
StringBuilder sb = new StringBuilder(s.length());
for (int i = s.length() - 2; i >= 0; i -= 2) {
sb.append(s.charAt(i)).append(s.charAt(i+1));
}
System.out.println(sb);
<强>输出
00086385