Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中将英特尔十六进制字符串转换为普通十六进制_Java_Hex - Fatal编程技术网

在java中将英特尔十六进制字符串转换为普通十六进制

在java中将英特尔十六进制字符串转换为普通十六进制,java,hex,Java,Hex,我有一个英特尔十六进制格式的字符串,它需要转换为十六进制格式,然后从那里转换为十进制。数据由gps设备发送 这是我应该得到的结果 Intel hex : 85630800 (input) device hex : 00086385 decimal : 549765 我怎么能得到这个 我尝试将英特尔十六进制转换为二进制,因为英特尔十六进制是二进制的ascii表示,二进制转换为十六进制,但它没有为输入85630800intelhex提供值00086385hex 我现在正在看这个库J

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

这是我应该得到的结果

Intel hex  : 85630800 (input)

device hex : 00086385 

decimal    : 549765 
我怎么能得到这个

我尝试将英特尔十六进制转换为二进制,因为英特尔十六进制是二进制的ascii表示,二进制转换为十六进制,但它没有为输入85630800intelhex提供值00086385hex

我现在正在看这个库Java Intel十六进制解析器

但这涉及到将英特尔十六进制文件转换为二进制格式,而不是字符串。我试图看看我是否可以使用代码部分或完整,但这似乎真的太过分了

也在看,但它是针对python的

一旦我将其转换为普通十六进制,我就可以使用Integer.ParseInt或Long.ParseInt表示十进制

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

更新


在阅读了答案之后,我意识到要问的正确问题是如何将小端十六进制字符串转换为大端十六进制字符串。我所拥有的GPS设备的文档将格式指定为intel Hex,这可能是因为基于intel的处理器是little Endian,这使我无法理解我所拥有的数据格式

如果您需要将一个小的endian十六进制字符串转换为一个大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);
输出


如果您需要将一个小的endian十六进制字符串转换为一个大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);
输出

一个可以帮助的功能,一个类应该阅读的javadoc

int input = (int) Long.parseLong("85630800", 16); // 0x85630800
int result = Integer.reverseBytes(input);
由于十六进制字符串可能大于带符号的int值,因此最好使用long

附录

自java 8:

一个可以帮助的功能,一个类应该阅读的javadoc

int input = (int) Long.parseLong("85630800", 16); // 0x85630800
int result = Integer.reverseBytes(input);
由于十六进制字符串可能大于带符号的int值,因此最好使用long

附录

自java 8:



当你说“英特尔十六进制格式”时,你的意思是“小endian”,对吗?您可以交换字符串中的字节,也可以将其解析为当前格式的整数,然后切换整数中的字节。你在这两方面都做了些什么?@JonSkeet告诉你真相,我不知道!!我的文档中说,一个特定的值是英特尔十六进制格式85630800,它的正常十六进制值是this00086385,十进制值是this549765。我需要用java代码进行转换。我在想英特尔十六进制的意思。好的。嗯,就像我说的,你可以用任何一种方法。你试过什么了吗?只是字符串操作会有点难看,但只需调用四个子字符串,将结果连接在一起…当你说“英特尔十六进制格式”时,你只是指小尾端,对吗?您可以交换字符串中的字节,也可以将其解析为当前格式的整数,然后切换整数中的字节。你在这两方面都做了些什么?@JonSkeet告诉你真相,我不知道!!我的文档中说,一个特定的值是英特尔十六进制格式85630800,它的正常十六进制值是this00086385,十进制值是this549765。我需要用java代码进行转换。我在想英特尔十六进制的意思。好的。嗯,就像我说的,你可以用任何一种方法。你试过什么了吗?只是字符串操作会有点难看,但只需调用四个子字符串,将结果连接在一起…pffff,我正要发布它!:P让我添加十六进制到整数的转换整数。parseIntsb.toString,16;再想一想,最好用Long.parseLongsb.toString,16来转换它以避免溢出。pffff,我正要发布它!:P让我添加十六进制到整数的转换整数。parseIntsb.toString,16;再想一想,最好使用Long.parseLongsb.toString,16来转换它,以避免溢出。很好,这似乎是最佳解决方案。但是,更大的十六进制值呢?不会溢出吗?这是解决他的问题的正确方法。我应该看看反向字节的API-@主英特尔体系结构=小端,java双端。该示例显示4个字节被反转为java int;2短或8长也是可能的。Little endian大约是排在第一位的最低有效字节,位于索引0处。对于嵌入2/4/8数字的其他大小的字节,请使用带有orderLITTLE_ENDIAN的ByteBuffer。@JoopEggen我明白了。我不熟悉ByteBuffer,但如果我有类似的问题,我会考虑的。谢谢。很好,这似乎是最佳解决方案。但是,更大的十六进制值呢?不会溢出吗?这是解决他的问题的正确方法。我应该看看反向字节的API-@主英特尔体系结构=小端,java双端。示例sh
ows 4字节被反转为java int;2短或8长也是可能的。Little endian大约是排在第一位的最低有效字节,位于索引0处。对于嵌入2/4/8数字的其他大小的字节,请使用带有orderLITTLE_ENDIAN的ByteBuffer。@JoopEggen我明白了。我不熟悉ByteBuffer,但如果我有类似的问题,我会考虑的。谢谢