Java十六进制字节数组转换为整数而不首先转换为字符串
我正在尝试转换包含十六进制值的字节数组Java十六进制字节数组转换为整数而不首先转换为字符串,java,arrays,int,hex,byte,Java,Arrays,Int,Hex,Byte,我正在尝试转换包含十六进制值的字节数组 byte[] bytes = {48, 48, 48, 48, 48, 51, 51, 99} 例如:48,48,48,48,48,51,51,99是0000033c,转换成int是828。 转换的唯一方法是将其转换为字符串,然后从字符串中解析整数 public static int ConvertValueFromBytes(byte[] bytes) { String b = new String(bytes);
byte[] bytes = {48, 48, 48, 48, 48, 51, 51, 99}
例如:48,48,48,48,48,51,51,99是0000033c,转换成int是828。
转换的唯一方法是将其转换为字符串,然后从字符串中解析整数
public static int ConvertValueFromBytes(byte[] bytes)
{
String b = new String(bytes);
return Converter.ConvertHexToInt(b);
}
这里的主要问题是性能,多次调用会导致性能问题。当试图从字节数组中解析int值时,我会得到大量的数字,这就是为什么我要从字符串中解析,以获得正确的值。
有没有更好的方法或解决方案 虽然不清楚为什么要用这种方式表示数据,但不使用字符串也很容易进行转换:
int v = 0;
for (byte b : bytes) {
v = 16 * v + Character.getNumericValue(b);
}
你的逻辑中有些东西不符合逻辑。为什么要将本质上是十六进制值的字符串表示形式存储在字节数组中?您的字节数组可能如下所示:
byte[]bytes={0,0,3,60}
,甚至只是{3,60}
。可能重复:我有一个大的单字符串十六进制值,最多包含2000多个字符。我要做的是将它们分成更小的部分来获得int值。@TimBiegeleisen我不需要字符串值,我需要int。你不需要基于十六进制字符串的字符值。每两个字符代表一个字节,所以您应该将它们作为一个字节进行解析。这种方法同样适用于解析负值。你能解释一下这个for循环是如何工作的吗?0x123
是((1)*16+2)*16)+3
。