java 字符串 进制之间的转换

本文介绍了一种将特定格式的十六进制字符串转换为十进制整数的方法,并提供了一个具体的Java实现示例。
最近项目中遇到一个问题:
String cardNum = "AC67D978";
,此时要求把cardNum转换为
cardNum = "2027513772"//十六进制0x78D967AC对应的十进制字符串
,考虑了好久,在同事的帮助下终于搞定,
不过并不知道这种方法是不是最佳,

/**
* 将操作员编码替换为消费卡卡号(并转换为10进制)
* @param cardNum 消费卡卡号(8字节)
* @return reStr 返回值
*/
private static String byte2String(String cardNum) {
String reStr = "001";//返回值
try {
if (cardNum.length() < 8) {
throw new Exception("读取POS传送的消费卡卡号不足8位");
}
byte[] bs = cardNum.getBytes();
byte[] b1 = new byte[bs.length];
int[] b2 = new int[bs.length / 2];
for (int i = 0; i < bs.length; i++) {//计算出cardNum中每一个字符对应的十进制
if (bs[i] >= 'A' || bs[i] >= 'a') {
b1[i] = (byte) (bs[i] - 0x30 - 7);
} else {
b1[i] = (byte) (bs[i] - 0x30);
}
}
b2[0] = b1[6] << 4 | (b1[7] & 0x0f);//例:得到120(0x78)
b2[1] = b1[4] << 4 | (b1[5] & 0x0f);//例:得到217(0xD9)
b2[2] = b1[2] << 4 | (b1[3] & 0x0f);//例:得到103(0x67)
b2[3] = b1[0] << 4 | (b1[1] & 0x0f);//例:得到172(0xAC)

reStr = (b2[0] << 24 | b2[1] << 16 | b2[2] << 8 | b2[3]) + "";//得到2027513772(0x78D967AC)
} catch (Exception e) {
logger.error(e.getMessage(), e);
return reStr;
}
return reStr;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值