@@ -11,34 +11,92 @@ public class HexadecimalToBinary {
11
11
12
12
public String hexToBin (String hexStr ) {
13
13
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 ;
16
18
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 ];
18
22
19
23
hexStr = hexStr .toUpperCase ();
20
-
24
+ int pointPosition = hexStr . indexOf ( "." );
21
25
/**
22
26
* Transform the hexadecimal number to decimal number
23
27
*/
28
+ if ( pointPosition == -1 ) {
24
29
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
+ }
28
34
}
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
+ }
29
53
54
+
55
+
56
+ int pointPositionDec = DecimalStr .indexOf ("." );
30
57
/**
31
- * Transform decimal number to binary and put it in an array
58
+ * Check whether the result contains a floating point or not
32
59
*/
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
+
36
79
}
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 ;
42
100
}
43
101
44
102
return binaryString ;
0 commit comments