2017-05-17 144 views
0

我正在致力於通過BLE接收字符串格式數據的Android應用程序。 該字符串包含十六進制格式的ADC值。爲了節省存儲空間,我每個字節包含兩個十六進制值(例如0xED)。但是,我無法從字符串中檢索這些值。 所以我需要能夠從字符串拆分每個索引字符在兩個字符串int[]將擴展字符轉換爲int java

至於現在我試圖得到charAt(index),然後鑄造charint。但是,這僅適用於ASCII有效數據。一旦數據超過127個字符,它就會返回一個默認的異常值。有什麼辦法可以避免這種情況?

下面的代碼工作正常,低於127的每一個值,所以我只需要上述127

for (int i = 0; i < 119; i++) { 
 
      char charTemp1 = datastring.charAt(i); 
 
      int test = charTemp1 & 0xF0; 
 
      int test2 = charTemp1 & 0xF; 
 
      }

+1

[解析](https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String中,%20int))將它們與一個基數16 – litelite

+4

請豎起一個[mcve]。向我們展示創建此類字符串的示例代碼,以及您卡在哪裏。 – GhostCat

+4

不要濫用字符串來存儲任意字節。這可能適用於C,但不在這裏。 –

回答

0

您可能需要解釋一下您是如何輸入值的解決方案字符串格式工作。您顯示119個字符,該字符串可能包含一對十六進制數字,我不明白這一點。請注意下面我給出的代碼示例爲testVector。你的字符串有什麼不同?

public class ParseInt 
{ 
    public static void main(String[] args) { 
     String testVector = "EDAB1234"; 
     System.out.println(Arrays.toString(parseInts(testVector))); 
    } 

    public static int[] parseInts(String hex) { 
     int[] retVal = new int[ hex.length()/2 ]; 
     for(int i = 0; i < hex.length()/2; i++) { 
     retVal[i] = Integer.parseInt(hex.substring(i*2, i*2+2), 16); 
     } 
     return retVal; 
    } 

} 
+0

我的字符串看起來像「!Ce 」或0x21 43 65 87 A9 CB ED 0F。因此,字符串 – Barrybas

+0

中每個字符有兩個十六進制值,您希望輸出是什麼?那些不是十六進制數字。 – markspace

+0

我想單獨的十六進制值 – Barrybas