[Java] 將HexString(16進位) 轉為byte[] (rawdata)

  • 15672
  • 0

摘要:[Java] 將HexString(16進位) 轉為byte[] (rawdata)

賀!!點部落註冊一年多,現在才首發wwww

 

當初學COBOL的第一個遇到困難的習題,

就是把1234轉存為X'1234'...

沒想到現在回頭寫Java,還是在這個功能卡住了一下XD

後來還好找到Solution , 趕快來記錄一下..



public static byte[] hexToBytes(string hexString) {

    char[] hex = hexString.toCharArray();
    //轉rawData長度減半
    int length = hex.length / 2;
    byte[] rawData = new byte[length];
    for (int i = 0; i < length; i++) {
      //先將hex資料轉10進位數值
      int high = Character.digit(hex[i * 2], 16);
      int low = Character.digit(hex[i * 2 + 1], 16);
      //將第一個值的二進位值左平移4位,ex: 00001000 => 10000000 (8=>128)
      //然後與第二個值的二進位值作聯集ex: 10000000 | 00001100 => 10001100 (137)
      int value = (high << 4) | low;
      //與FFFFFFFF作補集
      if (value > 127)
        value -= 256;
      //最後轉回byte就OK
      rawData [i] = (byte) value;
    }
    return rawData ;
}