我们如何使用c#将二进制数转换为八进制数?

时间:2010-09-23 19:16:09

标签: c#

* *嘿,我正在开发一个应用程序,它将任何基数如(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”

7 个答案:

答案 0 :(得分:5)

将基数10中的“10011”转换为基数8时,

“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)。