@@ -11,34 +11,92 @@ public class HexadecimalToBinary {
1111
1212public String hexToBin (String hexStr ) {
1313
14- String binaryString ="" ,hexaNumbers ="0123456789ABCDEF" ;
15- int indexOfHex ,decimalNumber =0 ,k =1 ;
14+ String binaryString ="" ,hexaNumbers ="0123456789ABCDEF" ,
15+ DecimalStr ="" ,binaryStringBefore ="" ,binaryStringAfter ="" ;
16+ int indexOfHex ,decimalNumber =0 ,k =1 ,n =1 ,z =1 ,decimalNumberBefore =0
17+ ,decimalNumberAfter =0 ;
1618char letter ;
17- int binaryArray [] =new int [50 ];
19+ int binaryArray [] =new int [60 ];
20+ int binaryArrayBefore [] =new int [60 ];
21+ int binaryArrayAfter [] =new int [60 ];
1822
1923hexStr =hexStr .toUpperCase ();
20-
24+ int pointPosition = hexStr . indexOf ( "." );
2125/**
2226 * Transform the hexadecimal number to decimal number
2327 */
28+ if (pointPosition == -1 ) {
2429for (int i =0 ;i <hexStr .length ();i ++) {
25- letter =hexStr .charAt (i );
26- indexOfHex =hexaNumbers .indexOf (letter );
27- decimalNumber =16 *decimalNumber +indexOfHex ;
30+ letter =hexStr .charAt (i );
31+ indexOfHex =hexaNumbers .indexOf (letter );
32+ decimalNumber =16 *decimalNumber +indexOfHex ;
33+ }
2834}
35+ else {
36+ for (int i =0 ;i <pointPosition ;i ++) {
37+ letter =hexStr .charAt (i );
38+ indexOfHex =hexaNumbers .indexOf (letter );
39+ decimalNumberBefore =16 *decimalNumberBefore +indexOfHex ;
40+ }
41+ String decimalNumberBeforeStr =String .valueOf (decimalNumberBefore );
42+
43+ for (int i =pointPosition +1 ;i <hexStr .length () ;i ++) {
44+ letter =hexStr .charAt (i );
45+ indexOfHex =hexaNumbers .indexOf (letter );
46+ decimalNumberAfter =16 *decimalNumberAfter +indexOfHex ;
47+ }
48+
49+ String decimalNumberAfterStr =String .valueOf (decimalNumberAfter );
50+
51+ DecimalStr =decimalNumberBeforeStr +'.' +decimalNumberAfterStr ;
52+ }
2953
54+
55+
56+ int pointPositionDec =DecimalStr .indexOf ("." );
3057/**
31- *Transform decimal number to binary and put it in an array
58+ *Check whether the result contains a floating point or not
3259 */
33- while (decimalNumber !=0 ) {
34- binaryArray [k ++] =decimalNumber %2 ;
35- decimalNumber =decimalNumber /2 ;
60+ if (pointPositionDec == -1 ) {
61+ while (decimalNumber !=0 ) {
62+ binaryArray [k ++] =decimalNumber %2 ;
63+ decimalNumber =decimalNumber /2 ;
64+ }
65+
66+ }else {
67+ /**
68+ * If it contains floating points we need to divide it into two parts before the point and after it
69+ */
70+ while (decimalNumberBefore !=0 ) {
71+ binaryArrayBefore [z ++] =decimalNumberBefore %2 ;
72+ decimalNumberBefore =decimalNumberBefore /2 ;
73+ }
74+ while (decimalNumberAfter !=0 ) {
75+ binaryArrayAfter [n ++] =decimalNumberAfter %2 ;
76+ decimalNumberAfter =decimalNumberAfter /2 ;
77+ }
78+
3679}
37- /**
38- * Put the binary in a string
39- */
40- for (int j =k -1 ;j >0 ;j --) {
41- binaryString =binaryString +binaryArray [j ];
80+
81+ if (pointPositionDec == -1 ) {
82+ for (int j =k -1 ;j >0 ;j --) {
83+ binaryString =binaryString +binaryArray [j ];
84+ }
85+ }else {
86+ for (int j =z -1 ;j >0 ;j --) {
87+ binaryStringBefore =binaryStringBefore +binaryArrayBefore [j ];
88+ }
89+
90+ for (int j =n -1 ;j >0 ;j --) {
91+ binaryStringAfter =binaryStringAfter +binaryArrayAfter [j ];
92+ }
93+ /**
94+ * Remove the zeroes in the end of the hexadecimal
95+ */
96+ binaryStringAfter =binaryStringAfter .replaceAll ("0*$" ,"" ).replaceAll ("\\ .$" ,"" );
97+
98+
99+ binaryString =binaryStringBefore +"." +binaryStringAfter ;
42100}
43101
44102return binaryString ;