簡體   English   中英

在Java中將十六進制的字符串轉換為字節數組時出錯

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM