數據加載中……
          java二進制,字節數組,字符,十六進制,BCD編碼轉換 (轉)
          java二進制,字節數組,字符,十六進制,BCD編碼轉換2007-06-07 00:17/**
              * 把16進制字符串轉換成字節數組
              * 
          @param hex
              * 
          @return
              
          */

          public static byte[] hexStringToByte(String hex) {
              
          int len = (hex.length() / 2);
              
          byte[] result = new byte[len];
              
          char[] achar = hex.toCharArray();
              
          for (int i = 0; i < len; i++{
               
          int pos = i * 2;
               result[i] 
          = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
              }

              
          return result;
          }


          private static byte toByte(char c) {
              
          byte b = (byte"0123456789ABCDEF".indexOf(c);
              
          return b;
          }


          /**
              * 把字節數組轉換成16進制字符串
              * 
          @param bArray
              * 
          @return
              
          */

          public static final String bytesToHexString(byte[] bArray) {
              StringBuffer sb 
          = new StringBuffer(bArray.length);
              String sTemp;
              
          for (int i = 0; i < bArray.length; i++{
               sTemp 
          = Integer.toHexString(0xFF & bArray[i]);
               
          if (sTemp.length() < 2)
                sb.append(
          0);
               sb.append(sTemp.toUpperCase());
              }

              
          return sb.toString();
          }


          /**
              * 把字節數組轉換為對象
              * 
          @param bytes
              * 
          @return
              * 
          @throws IOException
              * 
          @throws ClassNotFoundException
              
          */

          public static final Object bytesToObject(byte[] bytes) throws IOException, ClassNotFoundException {
              ByteArrayInputStream in 
          = new ByteArrayInputStream(bytes);
              ObjectInputStream oi 
          = new ObjectInputStream(in);
              Object o 
          = oi.readObject();
              oi.close();
              
          return o;
          }


          /**
              * 把可序列化對象轉換成字節數組
              * 
          @param s
              * 
          @return
              * 
          @throws IOException
              
          */

          public static final byte[] objectToBytes(Serializable s) throws IOException {
              ByteArrayOutputStream out 
          = new ByteArrayOutputStream();
              ObjectOutputStream ot 
          = new ObjectOutputStream(out);
              ot.writeObject(s);
              ot.flush();
              ot.close();
              
          return out.toByteArray();
          }


          public static final String objectToHexString(Serializable s) throws IOException{
              
          return bytesToHexString(objectToBytes(s));
          }


          public static final Object hexStringToObject(String hex) throws IOException, ClassNotFoundException{
              
          return bytesToObject(hexStringToByte(hex));
          }


          /**
              * @函數功能: BCD碼轉為10進制串(阿拉伯數據)
              * @輸入參數: BCD碼
              * @輸出結果: 10進制串
              
          */

          public static String bcd2Str(byte[] bytes){
              StringBuffer temp
          =new StringBuffer(bytes.length*2);

              
          for(int i=0;i<bytes.length;i++){
               temp.append((
          byte)((bytes[i]& 0xf0)>>>4));
               temp.append((
          byte)(bytes[i]& 0x0f));
              }

              
          return temp.toString().substring(0,1).equalsIgnoreCase("0")?temp.toString().substring(1):temp.toString();
          }


          /**
              * @函數功能: 10進制串轉為BCD碼
              * @輸入參數: 10進制串
              * @輸出結果: BCD碼
              
          */

          public static byte[] str2Bcd(String asc) {
              
          int len = asc.length();
              
          int mod = len % 2;

              
          if (mod != 0{
               asc 
          = "0" + asc;
               len 
          = asc.length();
              }


              
          byte abt[] = new byte[len];
              
          if (len >= 2{
               len 
          = len / 2;
              }


              
          byte bbt[] = new byte[len];
              abt 
          = asc.getBytes();
              
          int j, k;

              
          for (int p = 0; p < asc.length()/2; p++{
               
          if ( (abt[2 * p] >= '0'&& (abt[2 * p] <= '9')) {
                j 
          = abt[2 * p] - '0';
               }
           else if ( (abt[2 * p] >= 'a'&& (abt[2 * p] <= 'z')) {
                j 
          = abt[2 * p] - 'a' + 0x0a;
               }
           else {
                j 
          = abt[2 * p] - 'A' + 0x0a;
               }


               
          if ( (abt[2 * p + 1>= '0'&& (abt[2 * p + 1<= '9')) {
                k 
          = abt[2 * p + 1- '0';
               }
           else if ( (abt[2 * p + 1>= 'a'&& (abt[2 * p + 1<= 'z')) {
                k 
          = abt[2 * p + 1- 'a' + 0x0a;
               }
          else {
                k 
          = abt[2 * p + 1- 'A' + 0x0a;
               }


               
          int a = (j << 4+ k;
               
          byte b = (byte) a;
               bbt[p] 
          = b;
              }

              
          return bbt;
          }

          /**
              * @函數功能: BCD碼轉ASC碼
              * @輸入參數: BCD串
              * @輸出結果: ASC碼
              
          */

          public static String BCD2ASC(byte[] bytes) {
              StringBuffer temp 
          = new StringBuffer(bytes.length * 2);

              
          for (int i = 0; i < bytes.length; i++{
               
          int h = ((bytes[i] & 0xf0>>> 4);
               
          int l = (bytes[i] & 0x0f);   
               temp.append(BToA[h]).append( BToA[l]);
              }

              
          return temp.toString() ;
          }


          /**
              * MD5加密字符串,返回加密后的16進制字符串
              * 
          @param origin
              * 
          @return
              
          */

          public static String MD5EncodeToHex(String origin) 
                 
          return bytesToHexString(MD5Encode(origin));
               }


          /**
              * MD5加密字符串,返回加密后的字節數組
              * 
          @param origin
              * 
          @return
              
          */

          public static byte[] MD5Encode(String origin){
              
          return MD5Encode(origin.getBytes());
          }


          /**
              * MD5加密字節數組,返回加密后的字節數組
              * 
          @param bytes
              * 
          @return
              
          */

          public static byte[] MD5Encode(byte[] bytes){
              MessageDigest md
          =null;
              
          try {
               md 
          = MessageDigest.getInstance("MD5");
               
          return md.digest(bytes);
              }
           catch (NoSuchAlgorithmException e) {
               e.printStackTrace();
               
          return new byte[0];
              }

            
          }

          //關于byte:    signed byte 把 0x00 ~ 0xff 映射成范圍 0~127和 -128~-1    兩段,比較簡單的辦法用 (b+256)%256的辦法令其值回到0~255,或者用&0xff并賦給一個int。參考http://www.jsfsoft.com:8080/beyond-pebble/pinxue/2006/08/23/1156309692525.html 

          posted on 2007-08-27 11:02 當扎瓦 閱讀(4772) 評論(1)  編輯  收藏

          評論

          # re: java二進制,字節數組,字符,十六進制,BCD編碼轉換 (轉) 2013-04-12 19:38 Yakov

          誤人子弟!~~
          String s= "c20ad4d76fe97759aa27a0c99bff6710";
          System.out.println(s);
          System.out.println(bytesToHexString(hexStringToByte(s)));

          試試這段代碼,就知道完全不正確!~
            回復  更多評論    

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 普宁市| 永仁县| 日照市| 嘉义县| 和田县| 景泰县| 旅游| 抚顺市| 廉江市| 清河县| 河南省| 梁平县| 呈贡县| 商洛市| 花莲市| 玉屏| 古田县| 东台市| 鹤壁市| 鲁甸县| 特克斯县| 清河县| 越西县| 鄢陵县| 金坛市| 大厂| 水富县| 建阳市| 宜兰市| 凤凰县| 云和县| 石渠县| 婺源县| 舟曲县| 龙口市| 东兴市| 深水埗区| 九龙坡区| 苗栗县| 滨海县| 琼海市|