(16进制数据转换成10进制)HexToDecimal

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package ;

import ;

public class MainEntry {

public static void main(String[] args) { // 初始化16进制数据键值对

HashMap hmI2C = new HashMap();

HashMap hmC2I = new HashMap();

for(int i = 0; i < 10; i++) {

hmI2C.put(i, (char) ('0'+i));

hmC2I.put((char) ('0'+i), i);

}

for(int i = 0; i < 6; i++) {

hmI2C.put(10+i, (char) ('A'+i));

hmC2I.put((char) ('A'+i), 10+i);

}

// 调用功能接口

hexToDecimal("ECABFFFED1234D7897685DC", hmI2C, hmC2I);

}

/**

* 实现功能函数

*/

private static void hexToDecimal(String hexString,

HashMap hmI2C, HashMap hmC2I) { String result = "0"; // 初始化结果值

for(int i = 0; i < hexString.length()-1 ; i++) {

if (i == 0) {

result =

additional((hmC2I.get(hexString.charAt(i))). toString(),

"0", hmI2C, hmC2I);

result =

decimalStrMultiple16(result, hmI2C, hmC2I);

} else {

result = additional(result, (hmC2I.get(hexString.charAt(i))).toString(), hmI2C, hmC2I);

result =

decimalStrMultiple16(result, hmI2C, hmC2I);

}

}

result = additional(result,

(hmC2I.get(hexString.charAt(hexString.length ()-1))).toString(),

hmI2C, hmC2I);

"result = "+result);

}

/**

* 乘法:

* 被乘数

*/

private static String

decimalStrMultiple16(String decimalString,

HashMap hmI2C, HashMap hmC2I) { StringBuffer sb = new StringBuffer(); carryAndUnit cu = null;

for (int i = decimalString.length()-1;

i >=0; i--) {

if(i == decimalString.length()-1) { cu =

multipleOne(decimalString.charAt(i),

0, hmI2C, hmC2I);

} else {

cu =

multipleOne(decimalString.charAt(i),

cu.c, hmI2C, hmC2I);

}

sb.insert(0, cu.u);

}

if (cu.c > 0) {

sb.insert(0, cu.c);

}

return sb.toString();

}

/**

* 一位乘法:

* 被乘数

* 进位

* 直接乘了16,是因为16进制转换为10进制数

*/

private static carryAndUnit

multipleOne(char a, int c,

HashMap hmI2C, HashMap hmC2I) { int multiplicand = hmC2I.get(a);

int multiplier = 16;

int carry = c;

int result =

multiplicand*multiplier+carry;

carryAndUnit cu = new

carryAndUnit(result/10,

hmI2C.get(result%10));

return cu;

}

/**

* 加法:

* 被加数

* 加数

*/

private static String additional(String decimalResult, String addend,

HashMap hmI2C,

HashMap hmC2I) { StringBuffer sb = new StringBuffer();

carryAndUnit cu = null;

if (addend.length() == 1) {

for(int i = decimalResult.length()-1 ;

i >= 0; i--) {

if(i == decimalResult.length()-1) {

cu =

additionalOne(decimalResult.charAt(i),

addend.charAt(0), 0, hmI2C, hmC2I);

} else {

cu =

additionalOne(decimalResult.charAt(i),

'0', cu.c, hmI2C,

hmC2I);

}

sb.insert(0, cu.u);

}

if(cu.c > 0) {

sb.insert(0, cu.c);

}

} else if (addend.length() == 2) {

for(int i = decimalResult.length()-1 ;

i >= 0; i--) {

if(i == decimalResult.length()-1) {

cu =

相关文档
最新文档