Archived

This topic is now archived and is closed to further replies.

Translating Binary to decimal troubles

This topic is 5116 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I''m getting strange output of the translated binary string. Here''s my source:
void BinaryToDecimal()
{
	string binary = " ";
	int    i, j;
	int    decimal = 0;
	
  cout << "Please input a binary string of 0''s and 1''s to convert to a decimal number:	";
	cin  >> binary;

	for (i = 0; i < binary.length(); i++)
	{
		if (binary[i] == ''1'' || binary[i] == ''0'')
		{
			for (j = binary.length(); j >= 0; j--)
				decimal = (binary[j] * (pow(2,j)));
		}
		else if (binary[i] != ''0'')
			cout << "Bad!\n";
	}
	cout << endl << decimal;
}
That''s the command, run it and just insert 1. It should say 1 but it gives me 49. What''s wrong with it?
R.I.P. Mark Osback Solo Pa Mi Gente VG-Force

Share this post


Link to post
Share on other sites
49 is the ASCII code for the character ''1'' so technically it is correct.

You can look at an ASCII table
Here

Clippy:"OMG, A NUMBAR! Let me format it for you"
Unsuspecting Student: "Ahhhhh! Damn you paperclip you ruined my paper. A thousand deaths upon you!"

"Game Programming: Without programming you''ve just got game"

Share this post


Link to post
Share on other sites
Then you have to offset the character value like someone else explained in another thread you had, something like this although it isnt very pretty. I should also point out that the way you have things now it will only work it your input string is of length 1. For example if you input something like "1010" your program is only going to return 1 because you overwrite the value of decimal each time instead of keeping a running total. I can see some other issues too but I leave it to you to figure it out


for (j = binary.length(); j >= 0; j--)
//binary[j]-'0' will return a number between 0 and 9

//assuming binary[j] is a character for a number

decimal = ( (binary[j]-'0') * (pow(2,j)));


Clippy:"OMG, A NUMBAR! Let me format it for you"
Unsuspecting Student: "Ahhhhh! Damn you paperclip you ruined my paper. A thousand deaths upon you!"

"Game Programming: Without programming you've just got game"

[edited by - cmptrgear on December 13, 2003 4:11:47 PM]

[edited by - cmptrgear on December 13, 2003 4:13:56 PM]

Share this post


Link to post
Share on other sites
Check out the atoi function, it takes a character and returns an integer. Thus you can do something like:

int iBinary;
iBinary = atoi(binary[ i ]);

Then use iBinary in your calculations instead of the binary variable.

[edited by - tool_2046 on December 13, 2003 4:11:12 PM]

Share this post


Link to post
Share on other sites
quote:
Original post by Sneftel
Or you could just read in an integer to begin with.


"Sneftel is correct, if rather vulgar." --Flarelocke


Not that it''s likely to be an issue, but that would lower the maximum value of the number you want to convert.

______________________________________________________________
The Phoenix shall arise from the ashes... ThunderHawk -- ¦þ
MySite
______________________________________________________________

Share this post


Link to post
Share on other sites