我有一个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的处理器是低位字节序),这使我无法理解我所拥有的数据格式。
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)