I've written an algorithm which can multiply two hex values and return a hex as a result. What do you think about the below solution?
package com.datastructute.arraystring;
public class hexadecimal {
public static void main(String[] args) {
System.out.println(multiplyHex("AE08FE2111111111", "BF"));
System.out.println(multiplyHex("DF", "BC")); // A3C4
System.out.println(multiplyHex("ADF398", "BA48")); // 7e93e8f2c0
// Test Screnarios
System.out.println(multiplyHex(null, null));
System.out.println(multiplyHex(" ", " "));
System.out.println(multiplyHex("hyh", "hyhy"));
System.out.println(multiplyHex("abyh", "ashyhy"));
System.out.println(multiplyHex("-1-1-1", "-1-1-1"));
System.out.println(multiplyHex("AE08FE2111111111AE08FE2AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE2111111111AE08FE21111111111111AE08FE2111111111AE08FE21111111111111AE08FE21111AE08FE211111111111111", "AE0AE08FE21111111118FE2111111111AE08FE2111111111"));
}
public static String multiplyHex(String str1, String str2) {
if(str1 == null || str2 == null)
return "Null values are not accepted.";
char[] hex1 = str1.toCharArray();
char[] hex2 = str2.toCharArray();
int[][] ArrHexMatrix;
int arrLength = hex1.length + hex2.length;
int arrIndexLength = hex1.length + hex2.length - 1;
int lines = hex2.length;
ArrHexMatrix = new int[hex2.length][arrLength];
int mod = 0;
int carry = 0;
int count = 0;
int index = 0;
for (int i = lines - 1; i >= 0; i--) {
carry = 0;
count = 0;
for (int j = hex1.length - 1; j >= 0; j--) {
try {
if(getInt(hex2[i])==-1 || getInt(hex1[j])==-1)
return "Wrong chracter";
mod = (getInt(hex2[i]) * getInt(hex1[j]) + carry) % 16;
carry = ((getInt(hex2[i]) * getInt(hex1[j])) + carry) / 16;
if (j == 0) {
ArrHexMatrix[index][arrIndexLength - count - index] = mod;
ArrHexMatrix[index][arrIndexLength - count - 1 - index] = carry;
} else {
ArrHexMatrix[index][arrIndexLength - count - index] = mod;
}
} catch (Exception e) {
e.printStackTrace();
}
count++;
}
index++;
}
int sum = 0;
mod = 0;
carry = 0;
count = 0;
char[] total = new char[arrLength];
for (int i = arrLength - 1; i >= 0; i--) {
sum = 0;
for (int j = 0; j < lines; j++) {
sum += ArrHexMatrix[j][i];
}
mod = (sum + carry) % 16;
carry = (sum + carry) / 16;
try {
total[i] = getChar(mod);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return String.valueOf(total);
}
private static int getInt(char chr) {
switch (chr) {
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
case 'A':
return 10;
case 'B':
return 11;
case 'C':
return 12;
case 'D':
return 13;
case 'E':
return 14;
case 'F':
return 15;
default:
return -1;
}
}
private static char getChar(int val) throws Exception {
switch (val) {
case 0:
return '0';
case 1:
return '1';
case 2:
return '2';
case 3:
return '3';
case 4:
return '4';
case 5:
return '5';
case 6:
return '6';
case 7:
return '7';
case 8:
return '8';
case 9:
return '9';
case 10:
return 'A';
case 11:
return 'B';
case 12:
return 'C';
case 13:
return 'D';
case 14:
return 'E';
case 15:
return 'F';
default:
throw new Exception();
}
}
}