package com.dayu.baselibrary.tools; 
 | 
  
 | 
/** 
 | 
 * Copyright (C), 2022, 
 | 
 * Author: zuo 
 | 
 * Date: 2022/3/9 16:26 
 | 
 * Description: 
 | 
 */ 
 | 
public class BcdUtil { 
 | 
    /** 
 | 
     * BCD转ASCII字符串 
 | 
     * 
 | 
     * @param bytes BCD byte数组 
 | 
     * @return ASCII字符串 
 | 
     */ 
 | 
    public static String bcdToStr(byte[] bytes) { 
 | 
        char temp[] = new char[bytes.length * 2], val; 
 | 
  
 | 
        for (int i = 0; i < bytes.length; i++) { 
 | 
            val = (char) (((bytes[i] & 0xf0) >> 4) & 0x0f); 
 | 
            temp[i * 2] = (char) (val > 9 ? val + 'A' - 10 : val + '0'); 
 | 
  
 | 
            val = (char) (bytes[i] & 0x0f); 
 | 
            temp[i * 2 + 1] = (char) (val > 9 ? val + 'A' - 10 : val + '0'); 
 | 
        } 
 | 
        return new String(temp); 
 | 
    } 
 | 
  
 | 
    public static String bcdToStr(byte bytes) { 
 | 
        char temp[] = new char[2], val; 
 | 
        val = (char) (((bytes & 0xf0) >> 4) & 0x0f); 
 | 
        temp[0] = (char) (val > 9 ? val + 'A' - 10 : val + '0'); 
 | 
        val = (char) (bytes & 0x0f); 
 | 
        temp[1] = (char) (val > 9 ? val + 'A' - 10 : val + '0'); 
 | 
        return new String(temp); 
 | 
    } 
 | 
  
 | 
    /**------------------------Private method start-------------------------**/ 
 | 
    /** 
 | 
     * 转换单个byte为BCD 
 | 
     * 
 | 
     * @param asc ACSII 
 | 
     * @return BCD 
 | 
     */ 
 | 
    public static byte ascToBcd(byte asc) { 
 | 
        byte bcd; 
 | 
  
 | 
        if ((asc >= '0') && (asc <= '9')) { 
 | 
            bcd = (byte) (asc - '0'); 
 | 
        } else if ((asc >= 'A') && (asc <= 'F')) { 
 | 
            bcd = (byte) (asc - 'A' + 10); 
 | 
        } else if ((asc >= 'a') && (asc <= 'f')) { 
 | 
            bcd = (byte) (asc - 'a' + 10); 
 | 
        } else { 
 | 
            bcd = (byte) (asc - 48); 
 | 
        } 
 | 
        return bcd; 
 | 
    } 
 | 
  
 | 
    public static byte[] strToBcd(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 >>= 1; 
 | 
        } 
 | 
        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; 
 | 
    } 
 | 
} 
 |