ASC与BCD码之间的转换
代码如下:
str2Bcd可以处理阿拉伯数字和英文字母
bcd2Str可以处理阿拉伯数字不能处理英文字母
问题:
str2Bcd的处理正确吗?如果错误,错在那里?
bcd2Str的处理正确吗?如果错误,错在那里? 还有怎么实现处理英文字母?
-----------------------------------------------------------------------------
package Lib.AscBcd;
import java.nio.*;
/**
* @功能: ASC与BCD码的转化
* @生产者: 史建敏
* @生产时间: 2006-3-23
*/
public class AscBcd {
/**
* @功能: 构造体
*/
public AscBcd() {
}
/**
* @param args
*/
public static void main(String[] args)
{
String sTestData = "1234567890";
System.out.println("原数据:" + sTestData);
System.out.println("Bcd:" + str2Bcd(sTestData));
System.out.println("ASC:" + bcd2Str(str2Bcd(sTestData)));
sTestData = "B510610E627D9E5A";
System.out.println("原数据:" + sTestData);
System.out.println("Bcd:" + str2Bcd(sTestData));
System.out.println("ASC:" + bcd2Str(str2Bcd(sTestData)));
}
/**
* @函数功能: 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;
}
}