@@ -11,34 +11,92 @@ public class HexadecimalToBinary {
1111
1212 public 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 ;
1618 char 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
1923 hexStr = hexStr .toUpperCase ();
20-
24+ int pointPosition = hexStr . indexOf ( "." );
2125 /**
2226 * Transform the hexadecimal number to decimal number
2327 */
28+ if ( pointPosition == -1 ) {
2429 for ( 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
44102 return binaryString ;
0 commit comments