How can we convert binary number into its octal number using c#?
**Hey i was working on an application which converts any basenumber like (2,8,10,16,etc) to user's desire base system. I am having a problem开发者_JS百科 in converting a binary number to its octal number can anyone help me out?
I tried everthing like
// i am taking a binary number in value and then converting it to base 8
Int32 value = int.Parse(convertnumber);
Console.WriteLine(Convert.ToString(value, 8));
For example: value =10011
Answer should be this "23" but using the above code i am getting "23433"
"23433" is is the correct answer, when converting "10011" in base 10 to base 8.
You may have meant to interpret "10011" as a binary number. In which case, you want:
int value = Convert.ToInt32(convertnumber, 2);
Edit: in response to comments, here's almost-complete code:
string val = "10011";
int convertnumber = Convert.ToInt32(val, 2);
Console.WriteLine(Convert.ToString(convertnumber, 8)); // prints "23"
string binary = "10011";
int integer = Convert.ToInt32(binary, 2);
Console.WriteLine(Convert.ToString(integer, 8));
Output: 23
In this example we convert the binary string representation to an integer and from an integer to the octal string representation.
int value = Convert.ToInt32(convertnumber, 2);
Console.WriteLine(Convert.ToString(value, 8));
You are taking a base 10 number 10011 and converting it to base 8. Which is 23433.
If you want to do this manually (so you understand what is going on) here is a suggestion:
First pad the binary string to be divisable by 3 ( 3 bits = 1 octal digit )
string binary = "10011";
int pad = binary.Length % 3;
binary = new string('0', 3-pad) + binary;
Then process each three bits into one octal digit
int n = binary.Length / 3;
char[] bin_digits = binary.ToCharArray();
char[] oct_digits = new char[n];
for (int i = 0; i < n; i++)
{
int digit = bin_digits.Skip(3 * i).Take(3).Aggregate(0,
(x, v) => (int)v - (int)'0' + 2 * x);
// x is the value accumulation
// v is a char '0' or '1' representing a bit and is converted to int 0, 1
oct_digits[i] = (char)(digit + (int)'0');
// convert int to char digit
}
Convert the digits array into a string
string oct_value = new string(oct_digits);
Example results:
"10011" -> "23"
"11000" -> "30"
"1011011" -> "133"
Naturally, int.Parse
parses a decimal number. If your input is binary, then you'll need to first do a conversion from binary to integer.
Int32 value = Convert.ToInt32( "10011", 2 );
Console.WriteLine(Convert.ToString(value, 8));
That's because int.Parse is converting 10011 to, well, 10011 in decimal. It is not converting it from 10011 binary to 23 octal (19 decimal) as you want it to.
精彩评论