六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 39|回复: 0

java 字符串 进制之间的转换

[复制链接]

升级  42%

5

主题

5

主题

5

主题

童生

Rank: 1

积分
21
 楼主| 发表于 2013-2-3 14:37:02 | 显示全部楼层 |阅读模式
最近项目中遇到一个问题:
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;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表