Преобразование целого числа в двоичное в C # - PullRequest
157 голосов
/ 02 июня 2010

Как преобразовать целое число в его двоичное представление?

Я использую этот код:

String input = "8";
String output = Convert.ToInt32(input, 2).ToString();

Но выдает исключение:

* +1007 *

Не удалось найти разборчивые цифры

Ответы [ 18 ]

293 голосов
/ 02 июня 2010

В вашем примере целое число выражено в виде строки. Допустим, ваше целое число было целым числом, и вы хотите взять целое число и преобразовать его в двоичную строку.

int value = 8;
string binary = Convert.ToString(value, 2);

Что возвращает 1000.

40 голосов
/ 19 декабря 2012

Конвертировать из любой классической базы в любую базу в C #

String number = "100";
int fromBase = 16;
int toBase = 10;

String result = Convert.ToString(Convert.ToInt32(number, fromBase), toBase);

// result == "256"

Поддерживаемые базы: 2, 8, 10 и 16

30 голосов
/ 14 января 2012

Очень просто без лишнего кода, только ввод, преобразование и вывод.

using System;

namespace _01.Decimal_to_Binary
{
    class DecimalToBinary
    {
        static void Main(string[] args)
        {
            Console.Write("Decimal: ");
            int decimalNumber = int.Parse(Console.ReadLine());

            int remainder;
            string result = string.Empty;
            while (decimalNumber > 0)
            {
                remainder = decimalNumber % 2;
                decimalNumber /= 2;
                result = remainder.ToString() + result;
            }
            Console.WriteLine("Binary:  {0}",result);
        }
    }
}
10 голосов
/ 24 октября 2011

http://zamirsblog.blogspot.com/2011/10/convert-decimal-to-binary-in-c.html

    public string DecimalToBinary(string data)
    {
        string result = string.Empty;
        int rem = 0;
        try
        {
            if (!IsNumeric(data))
                error = "Invalid Value - This is not a numeric value";
            else
            {
                int num = int.Parse(data);
                while (num > 0)
                {
                    rem = num % 2;
                    num = num / 2;
                    result = rem.ToString() + result;
                }
            }
        }
        catch (Exception ex)
        {
            error = ex.Message;
        }
        return result;
    }
8 голосов
/ 08 января 2016

Примитивный путь:

public string ToBinary(int n)
{
    if (n < 2) return n.ToString();

    var divisor = n / 2;
    var remainder = n % 2;

    return ToBinary(divisor) + remainder;
}
5 голосов
/ 02 июня 2010

Convert.ToInt32(string, base) не делает конвертацию базы в вашу базу. Предполагается, что строка содержит действительное число в указанной базе и преобразуется в базу 10.

Итак, вы получаете ошибку, потому что "8" не является действительной цифрой в базе 2.

String str = "1111";
String Ans = Convert.ToInt32(str, 2).ToString();

Покажет 15 (1111 база 2 = 15 база 10)

String str = "f000";
String Ans = Convert.ToInt32(str, 16).ToString();

Покажет 61440.

4 голосов
/ 02 июня 2010
using System;

class Program 
{
    static void Main(string[] args) {

        try {

            int i = (int) Convert.ToInt64(args[0]);
            Console.WriteLine("\n{0} converted to Binary is {1}\n", i, ToBinary(i));

        } catch(Exception e) {
            Console.WriteLine("\n{0}\n", e.Message);
        }
    }

    public static string ToBinary(Int64 Decimal) {
        // Declare a few variables we're going to need
        Int64 BinaryHolder;
        char[] BinaryArray;
        string BinaryResult = "";

        while (Decimal > 0) {
            BinaryHolder = Decimal % 2;
            BinaryResult += BinaryHolder;
            Decimal = Decimal / 2;
        }

        BinaryArray = BinaryResult.ToCharArray();
        Array.Reverse(BinaryArray);
        BinaryResult = new string(BinaryArray);

        return BinaryResult;
    }
}
4 голосов
/ 09 июля 2014

Я знаю, что этот ответ будет похож на большинство ответов уже здесь, но я заметил, что почти ни один из них не использует цикл for. Этот код работает и может считаться простым в том смысле, что он будет работать без каких-либо специальных функций, таких как ToString () с параметрами, и также не будет слишком длинным. Может быть, некоторые предпочитают цикл for вместо цикла while, это может подойти для них.

public static string ByteConvert (int num)
{
    int[] p = new int[8];
    string pa = "";
    for (int ii = 0; ii<= 7;ii = ii +1)
    {
        p[7-ii] = num%2;
        num = num/2;
    }
    for (int ii = 0;ii <= 7; ii = ii + 1)
    {
        pa += p[ii].ToString();
    }
    return pa;
}
2 голосов
/ 20 марта 2019
    static void convertToBinary(int n)
    {
        Stack<int> stack = new Stack<int>();
        stack.Push(n);
        // step 1 : Push the element on the stack
        while (n > 1)
        {
            n = n / 2;
            stack.Push(n);
        }

        // step 2 : Pop the element and print the value
        foreach(var val in stack)
        {
            Console.Write(val % 2);
        }
     }
2 голосов
/ 10 мая 2018

Другое альтернативное, но также встроенное решение с использованием Enumerable и LINQ:

int number = 25;

string binary = Enumerable.Range(0, (int) Math.Log(number, 2) + 1).Aggregate(string.Empty, (collected, bitshifts) => (number >> bitshifts) % 2 + collected);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...