* *嘿,我正在开发一个应用程序,它将任何基数如(2,8,10,16等)转换为用户的欲望基础系统。我在将二进制数转换为八进制数时遇到问题,任何人都可以帮助我吗?
我试过像
那样翻转// 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));
例如: 值= 10011
答案应该是“23”,但使用上面的代码我得到“23433”
答案 0 :(得分:5)
“23433”是正确的答案。
您可能打算将“10011”解释为二进制数。在这种情况下,您需要:
int value = Convert.ToInt32(convertnumber, 2);
编辑:在回复评论时,这里几乎是完整的代码:
string val = "10011";
int convertnumber = Convert.ToInt32(val, 2);
Console.WriteLine(Convert.ToString(convertnumber, 8)); // prints "23"
答案 1 :(得分:4)
string binary = "10011";
int integer = Convert.ToInt32(binary, 2);
Console.WriteLine(Convert.ToString(integer, 8));
Output: 23
在这个例子中,我们将二进制字符串表示转换为整数,并从整数转换为八进制字符串表示。
答案 2 :(得分:3)
int value = Convert.ToInt32(convertnumber, 2);
Console.WriteLine(Convert.ToString(value, 8));
您正在使用10号基数并将其转换为基数8.这是23433。
答案 3 :(得分:3)
如果你想手动执行此操作(以便了解发生了什么),这里有一个建议:
首先将二进制字符串填充为3(3位= 1个八进制数字)
string binary = "10011";
int pad = binary.Length % 3;
binary = new string('0', 3-pad) + binary;
然后将每三位处理成一个八进制数
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
}
将digits数组转换为字符串
string oct_value = new string(oct_digits);
示例结果:
"10011" -> "23"
"11000" -> "30"
"1011011" -> "133"
答案 4 :(得分:1)
当然,int.Parse
会解析十进制号码。如果您的输入是二进制的,那么您需要先从二进制转换为整数。
答案 5 :(得分:1)
Int32 value = Convert.ToInt32( "10011", 2 );
Console.WriteLine(Convert.ToString(value, 8));
答案 6 :(得分:0)
那是因为int.Parse正在将10011转换为十进制的10011。它不会将它从10011二进制转换为23八进制(十进制19)。