[英]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.