Binary to Hexadecimal Conversion

L

lei

Hello! I made this program of converting binary to hexadecimal, there
are few errors which are new to me. Please check it out. Thanks!

<code>

import java.lang.*;
import java.io.*;

class BinaryDecoder{
public static void main(String args[]) throws IOException{
InputStreamReader stdin = new InputStreamReader(System.in);
BufferedReader console = new BufferedReader(stdin);
System.out.print("Enter a number in binary: ");
String input = console.readLine();


int decimal=0;
for(int counter=input.length()-1; counter>=0; counter--){
if(input.charAt(counter)=='1'){
int exp=input.length()-1-counter;
decimal+=Math.pow(2,exp);
}
}

int hexadecimal=0;
int powerOfTen=1;
int number=decimal;
int counter=0;
int[] hex = new int[20];

while(number>0){
int remainder=number%16;
hex[counter] = remainder;
counter++;
number/=16;
}

System.out.print("Hexadecimal: ");
for(int count=hex.length; count>=0; count--){
if(hex[count]==10)
System.out.print("A");
else if(hex[count]==11)
System.out.print("B");
else if(hex[count]==12)
System.out.print("C");
else if(hex[count]==13)
System.out.print("D");
else if(hex[count]==14)
System.out.print("E");
else if(hex[count]==15)
System.out.print("F");
else
System.out.print(hex[count]);
}
}
}

</code>
 
B

Brandon McCombs

lei said:
Hello! I made this program of converting binary to hexadecimal, there
are few errors which are new to me. Please check it out. Thanks!

<code>

import java.lang.*;
import java.io.*;

class BinaryDecoder{
public static void main(String args[]) throws IOException{
InputStreamReader stdin = new InputStreamReader(System.in);
BufferedReader console = new BufferedReader(stdin);
System.out.print("Enter a number in binary: ");
String input = console.readLine();


int decimal=0;
for(int counter=input.length()-1; counter>=0; counter--){
if(input.charAt(counter)=='1'){
int exp=input.length()-1-counter;
decimal+=Math.pow(2,exp);
}
}

int hexadecimal=0;
int powerOfTen=1;
int number=decimal;
int counter=0;
int[] hex = new int[20];

while(number>0){
int remainder=number%16;
hex[counter] = remainder;
counter++;
number/=16;
}

System.out.print("Hexadecimal: ");
for(int count=hex.length; count>=0; count--){
if(hex[count]==10)
System.out.print("A");
else if(hex[count]==11)
System.out.print("B");
else if(hex[count]==12)
System.out.print("C");
else if(hex[count]==13)
System.out.print("D");
else if(hex[count]==14)
System.out.print("E");
else if(hex[count]==15)
System.out.print("F");
else
System.out.print(hex[count]);
}
}
}

</code>

How about you tell us the errors you have found so far instead of
relying on us to scan your code and/or compile it to generate the errors?
 
T

Thomas Schodt

lei said:
I made this program of converting binary to hexadecimal,
there are few errors which are new to me.
for(int count=hex.length; count>=0; count--){
if(hex[count]==10)

You are addressing the array 'hex' beyond the end.
 
L

lei

Thomas said:
lei said:
I made this program of converting binary to hexadecimal,
there are few errors which are new to me.
for(int count=hex.length; count>=0; count--){
if(hex[count]==10)

You are addressing the array 'hex' beyond the end.

please explain further and suggest a solution(if it's okay), thank you
so much!
 
L

lei

It's working now. Another problem:

Enter a number in binary: 10000011
Hexadecimal: 00000000000000000083

How can I remove the zeros?
 
L

Lew

lei said:
It's working now. Another problem:

Enter a number in binary: 10000011
Hexadecimal: 00000000000000000083

How can I remove the zeros?

A very good question!

Take yourself off the keyboard for a few minutes, maybe actually use a
pen[cil] and paper to work through the inherent logic of the challenge.

Think along the lines of, "Hmm, what conditions pertain when a am preparing to
output a '0' that would require me to display it? What conditions would allow
me to suppress it?" (Hint: One of the conditions is that the numeral to
display at the moment is '0'.)

Then detect those conditions in your code, and either emit or decline to emit
the '0' as appropriate.

- Lew
 
D

Don Roby

lei said:
you can also suggest for improvements..thanks!

The biggest improvement would be to introduce some functions instead of
just having one long main method. Introducing objects might be nice as
well, but I suspect this is an exercise pretty early in your class.

The loop converting the binary string to an int should be an int-valued
function with a string argument. The computations in this loop could
also be done without calls to Math.pow. (Hint: You only need
multiplications by 2 and additions.)

It might also be nice to detect overflow here and give an error if the
user enters something too large for an int. As it stands, the code just
gives the result for the maximum int value if something larger is
entered. This could be out of scope for an introductory level
assignment though.

A 20 digit hex string is far larger than the maximum int value, so
you'll always have leading zeros with this process unless you detect
them and don't print them.

But the int[20] array really shouldn't be needed at all. Think about
how to build a string from your remainders as you go instead of saving
them in an array.

And again, this really should be a function rather than a loop inside main.

Finally, if you really want to impress your teacher, think about going
straight from binary string to hex string without ever producing an int,
thereby not needing to worry about those integer overflows. This is
actually not hard for going from binary to hex or octal. Other bases
would be much messier.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,825
Latest member
VernonQuy6

Latest Threads

Top