[英]Getting error in convert a string of a hex to a byte array in Java
我正在寻找一种将代表十六进制值的字符串转换为字节数组的方法。 此代码非常适合偶数字符串长度,但不适用于奇数字符串长度。 如果字符串长度为奇数,则得到java.lang.StringIndexOutOfBoundsException。 请帮忙。
public byte[] hexStringToByteArray(String s) {
byte[] data = null;
if(! s.equals("")){
int len = s.length();
data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
}
return data;
}
您的for循环表示在i < len
继续循环,这使我成为循环中字符串的最后一个索引,从而导致s.charAt(i+1)
访问不存在的字节。
将循环条件更改为i < len-1
或i+1 < len
。
奇数情况下的数据大小变小。
假设字符串长度为7,那么数据数组的大小为3,
7/2 = 3(取整数值)
在循环的后面,您尝试访问的数据为0到3(大小为4)。
另外,您正在访问s.charAt(i + 1)中的元素,因为循环从0到7开始,因此索引更大。i的值更改为:
0 2 4 6
当它是6时,s.charAt(7)将抛出StringIndexOutOfBoundsException。 字符串的长度为7(索引0到6)。 字符串中没有第七个索引。
解决方案是减少编号。 通过更改循环条件来运行循环次数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.