在Java中将Intel十六进制字符串转换为普通十六进制

Raj*_*Raj 1 java hex

我有一个intel十六进制格式的字符串,需要将其转换为十六进制格式,然后从那里转换为十进制。数据从gps设备发送。

这是我应该得到的结果

Intel hex  : 85630800 (input)

device hex : 00086385 

decimal    : 549765 
Run Code Online (Sandbox Code Playgroud)

我怎么能得到这个?

我试图将intel hex转换为二进制(因为intel hex是二进制的ascii rep)和将binary转换为hex,但是它没有给我输入86630800(intelhex)的值00086385(hex)

我现在正在看这个库Java Intel hex parser https://github.com/j123b567/java-intelhex-parser

但这是关于将intel hex文件转换为二进制格式而不是字符串的问题。我试图查看我是否可以使用该代码(部分或全部),但似乎真的过分了。

还查看将Intel HEX文件转换为二进制文件,但这是针对python的。

一旦将其转换为普通十六进制,就可以将Integer.ParseInt()或Long.ParseInt()用作小数。

但是我无法将intel十六进制字符串转换为普通的十六进制格式。有没有办法将intel十六进制字符串转换为java中的普通十六进制字符串或值?

更新资料

阅读答案后,我意识到要问的正确问题是如何将Little endian十六进制字符串转换为Big endian。我所拥有的GPS设备的文档将格式指定为intel hex(也许是因为基于Intel的处理器是低位字节序),这使我无法理解我所拥有的数据格式。

Joo*_*gen 5

Integer的功能可以提供帮助,一类应该阅读其Javadoc。

int input = (int) Long.parseLong("85630800", 16); // 0x85630800
int result = Integer.reverseBytes(input);
Run Code Online (Sandbox Code Playgroud)

由于十六进制字符串可以大于有符号的 int值,因此最好长时间使用。


附录

从Java 8开始:parseUnsignedInt

int input = Integer.parseUnsignedInt("85630000", 16);
Run Code Online (Sandbox Code Playgroud)