package com.dayu.recharge.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;
|
}
|
}
|