【发布时间】:2016-01-01 18:44:46
【问题描述】:
我有一个 intel 十六进制格式 的字符串,它需要转换为十六进制格式,然后从那里转换为十进制。数据是从 GPS 设备发送的。
这是我应该得到的结果
Intel hex : 85630800 (input)
device hex : 00086385
decimal : 549765
我怎样才能得到这个?
我试图将 intel hex 转换为二进制(因为 intel hex 是二进制的 ascii 代表)和二进制到十六进制,但它没有给我输入 85630800(intelhex) 的值 00086385(hex)
我现在正在查看这个库 Java Intel hex parser https://github.com/j123b567/java-intelhex-parser
但这谈到将 intel 十六进制文件转换为二进制格式而不是字符串。我正在尝试查看是否可以使用代码(部分或全部),但它似乎真的有点矫枉过正。
还查看Convert Intel HEX file to binary file,但它适用于 python 。
一旦我把它转换成普通的十六进制,我就可以使用 Integer.ParseInt() 或 Long.ParseInt() 来表示十进制。
但我无法将 intel 十六进制字符串转换为正常的十六进制格式。有没有办法将 intel 十六进制字符串转换为普通的十六进制字符串或 java 中的值?
更新
阅读答案后,我意识到要问的正确问题是如何将 Little endian 十六进制字符串转换为 Big endian 。我拥有的 GPS 设备的文档将格式指定为 intel hex(可能是因为基于 Intel 的处理器是小端序),这让我无法理解我拥有的数据格式。
【问题讨论】:
-
当您说“intel hex format”时,您的意思是“little-endian”,对吗?您可以只交换字符串中的字节,也可以将其解析为当前格式的整数并切换整数中的字节。您在这两个方面尝试过什么?
-
@JonSkeet 告诉你我不知道的真相!我的文档说一个特定的值是 intel 十六进制格式(85630800),它的正常十六进制值是 this(00086385) 和十进制值是 this(549765) 。我需要在java代码中进行转换。我在想英特尔十六进制意味着en.wikipedia.org/wiki/Intel_HEX。
-
好的。好吧,正如我所说 - 你可以这样做。你有没有尝试过任何东西?只是字符串操作会有点难看但有效(只需四次调用子字符串,将结果连接在一起......)