1. 程式人生 > >Android 10進位制轉16進位制

Android 10進位制轉16進位制

之前由於工作需要,用到串列埠通訊。在用網上谷歌開源的串列埠通訊程式碼向串列埠傳送指令時,由於機器接收的是16進位制的指令。後來發現初始16進位制的byte陣列經過一系列轉換後,變成了10進位制的byte陣列,當使用OutputStream的write方法向串列埠傳送該陣列時,機器沒有反應。

後來心中便猜想是不是write(1)和write(0x01)到機器那邊是不是不一樣的資料。結果後來測試果然是不一樣的。於是就需要想辦法把10進位制的byte陣列轉換成16進位制。

網上查了很多資料,很多部落格都是使用Integer.toHexString()來轉換,但是這只是轉換成16進位制字串顯示,實際上還是和原始的byte16進位制陣列不一樣的,即使使用轉換後的String.getBytes[]也是一樣。

解決方案:

經過查詢,系統api裡並沒有10進位制轉換成16進位制的方法,因此這裡自己寫出轉換的方法。

/**
     *  普通字元轉換成16進位制字串
     * @param str
     * @return
     */
    public static String str2HexStr(String str)
    {
        byte[] bytes = str.getBytes();
        // 如果不是寬型別的可以用Integer
        BigInteger bigInteger = new BigInteger(1, bytes);  
        return
bigInteger.toString(16); } /** 16進位制的字串轉換成16進位制字串陣列 * @param src * @return */ public static byte[] HexString2Bytes(String src) { int len = src.length() / 2; byte[] ret = new byte[len]; byte[] tmp = src.getBytes(); for (int i = 0; i < len; i++) { ret[i] = uniteBytes(tmp[i * 2
], tmp[i * 2 + 1]); } return ret; } public static byte uniteBytes(byte src0, byte src1) { byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue(); _b0 = (byte) (_b0 << 4); byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue(); byte ret = (byte) (_b0 ^ _b1); return ret; } /* * 位元組陣列轉16進位制字串顯示 */ public String bytes2HexString(byte[] b,int length) { String r = ""; for (int i = 0; i < length; i++) { String hex = Integer.toHexString(b[i] & 0xFF); if (hex.length() == 1) { hex = "0" + hex; } r += hex.toUpperCase(); } return r; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

使用方法:

1、如果原始是10進位制的byte陣列,則先呼叫byte2HexString()方法將其轉換成16進位制顯示的String字串,然後呼叫HexString2Bytes()方法得到16進位制的byte陣列。

2、如果原始是字串,則呼叫str2HexStr()方法將其轉換成16進位制字串,然後呼叫HexString2Byte()得到16進位制byte陣列。

最後,呼叫OutputStream物件的write()方法將資料輸出。

原文地址:https://blog.csdn.net/u013564742/article/details/74390820