Converteer geheel getal naar binair in C#

Hoe zet je een geheel getal om in zijn binaire representatie?

Ik gebruik deze code:

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

Maar het genereert een uitzondering:

Kon geen parseerbare cijfers vinden


Antwoord 1, autoriteit 100%

Uw voorbeeld heeft een geheel getal uitgedrukt als een tekenreeks. Laten we zeggen dat uw geheel getal eigenlijk een geheel getal was en dat u het gehele getal wilt nemen en het wilt converteren naar een binaire tekenreeks.

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

Wat 1000 oplevert.


Antwoord 2, autoriteit 12%

Converteer van elke klassieke basis naar elke basis in C#

String number = "100";
int fromBase = 16;
int toBase = 10;
String result = Convert.ToString(Convert.ToInt32(number, fromBase), toBase);
// result == "256"

Ondersteunde bases zijn 2, 8, 10 en 16


Antwoord 3, autoriteit 9%

Heel eenvoudig zonder extra code, alleen invoer, conversie en uitvoer.

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);
        }
    }
}

Antwoord 4, autoriteit 3%

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;
    }

Antwoord 5, autoriteit 2%

primitieve manier:

public string ToBinary(int n)
{
    if (n < 2) return n.ToString();
    var divisor = n / 2;
    var remainder = n % 2;
    return ToBinary(divisor) + remainder;
}

Antwoord 6, autoriteit 2%

Convert.ToInt32(string, base)doet geen base-conversie naar uw base. Het neemt aan dat de string een geldig getal bevat in het aangegeven grondtal, en converteert naar grondtal 10.

Je krijgt dus een foutmelding omdat “8” geen geldig cijfer is in grondtal 2.

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

Toont 15(1111 basis 2 = 15 basis 10)

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

tonen 61440.


Antwoord 7, Autoriteit 2%

Nog een alternatief, maar ook inline-oplossing met Enumerableen LINQis:

int number = 25;
string binary = Enumerable.Range(0, (int)Math.Log(number, 2) + 1).Aggregate(string.Empty, (collected, bitshifts) => ((number >> bitshifts) & 1 ) + collected);

Antwoord 8

Ik weet dat dit antwoord lijkt op het grootste deel van de antwoorden hier al, maar ik merkte op dat moment geen van hen gebruikt een for-lus. Deze code werkt en kan als eenvoudig worden beschouwd, in die zin zal het werken zonder speciale functies, zoals een tostrering () met parameters, en is ook niet zo lang. Misschien geven sommige de voorkeur aan lussen in plaats van gewoon tijdens het lus, kan dit geschikt zijn voor hen.

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;
}

Antwoord 9

   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);
        }
     }

Antwoord 10

Deze functie converteert geheel getal naar binair in C #:

public static string ToBinary(int N)
{
    int d = N;
    int q = -1;
    int r = -1;
    string binNumber = string.Empty;
    while (q != 1)
    {
        r = d % 2;
        q = d / 2;
        d = q;
        binNumber = r.ToString() + binNumber;
    }
    binNumber = q.ToString() + binNumber;
    return binNumber;
}

Antwoord 11

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;
    }
}

Antwoord 12

class Program
{
    static void Main(string[] args)
    {
        var @decimal = 42;
        var binaryVal = ToBinary(@decimal, 2);
        var binary = "101010";
        var decimalVal = ToDecimal(binary, 2);
        Console.WriteLine("Binary value of decimal {0} is '{1}'", @decimal, binaryVal);
        Console.WriteLine("Decimal value of binary '{0}' is {1}", binary, decimalVal);
        Console.WriteLine();
        @decimal = 6;
        binaryVal = ToBinary(@decimal, 3);
        binary = "20";
        decimalVal = ToDecimal(binary, 3);
        Console.WriteLine("Base3 value of decimal {0} is '{1}'", @decimal, binaryVal);
        Console.WriteLine("Decimal value of base3 '{0}' is {1}", binary, decimalVal);
        Console.WriteLine();
        @decimal = 47;
        binaryVal = ToBinary(@decimal, 4);
        binary = "233";
        decimalVal = ToDecimal(binary, 4);
        Console.WriteLine("Base4 value of decimal {0} is '{1}'", @decimal, binaryVal);
        Console.WriteLine("Decimal value of base4 '{0}' is {1}", binary, decimalVal);
        Console.WriteLine();
        @decimal = 99;
        binaryVal = ToBinary(@decimal, 5);
        binary = "344";
        decimalVal = ToDecimal(binary, 5);
        Console.WriteLine("Base5 value of decimal {0} is '{1}'", @decimal, binaryVal);
        Console.WriteLine("Decimal value of base5 '{0}' is {1}", binary, decimalVal);
        Console.WriteLine();
        Console.WriteLine("And so forth.. excluding after base 10 (decimal) though :)");
        Console.WriteLine();
        @decimal = 16;
        binaryVal = ToBinary(@decimal, 11);
        binary = "b";
        decimalVal = ToDecimal(binary, 11);
        Console.WriteLine("Hexidecimal value of decimal {0} is '{1}'", @decimal, binaryVal);
        Console.WriteLine("Decimal value of Hexidecimal '{0}' is {1}", binary, decimalVal);
        Console.WriteLine();
        Console.WriteLine("Uh oh.. this aint right :( ... but let's cheat :P");
        Console.WriteLine();
        @decimal = 11;
        binaryVal = Convert.ToString(@decimal, 16);
        binary = "b";
        decimalVal = Convert.ToInt32(binary, 16);
        Console.WriteLine("Hexidecimal value of decimal {0} is '{1}'", @decimal, binaryVal);
        Console.WriteLine("Decimal value of Hexidecimal '{0}' is {1}", binary, decimalVal);
        Console.ReadLine();
    }
    static string ToBinary(decimal number, int @base)
    {
        var round = 0;
        var reverseBinary = string.Empty;
        while (number > 0)
        {
            var remainder = number % @base;
            reverseBinary += remainder;
            round = (int)(number / @base);
            number = round;
        }
        var binaryArray = reverseBinary.ToCharArray();
        Array.Reverse(binaryArray);
        var binary = new string(binaryArray);
        return binary;
    }
    static double ToDecimal(string binary, int @base)
    {
        var val = 0d;
        if (!binary.All(char.IsNumber))
            return 0d;
        for (int i = 0; i < binary.Length; i++)
        {
            var @char = Convert.ToDouble(binary[i].ToString());
            var pow = (binary.Length - 1) - i;
            val += Math.Pow(@base, pow) * @char;
        }
        return val;
    }
}

Leerbronnen:

alles wat u moet weten over binair

inclusief algoritme om decimaal te converteren naar binair


Antwoord 13

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);
      }
   }//end Main
        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;
            }
            // The algoritm gives us the binary number in reverse order (mirrored)
            // We store it in an array so that we can reverse it back to normal
            BinaryArray = BinaryResult.ToCharArray();
            Array.Reverse(BinaryArray);
            BinaryResult = new string(BinaryArray);
            return BinaryResult;
        }
}//end class Program

Antwoord 14

BLCL verstrekt Convert.ToString(n, 2)is goed, maar voor het geval u een alternatieve implementatie nodig heeft die enkele tikken sneller is dan BCL mits een.

Na aangepaste implementatie werkt voor alle gehele getallen (-VE en + VE).
Originele bron genomen van https://davidsekar.com/algorithms/ CSHARP-PROGRAMMA-To-Convert-Decimal-to-Binary

static string ToBinary(int n)
{
    int j = 0;
    char[] output = new char[32];
    if (n == 0)
        output[j++] = '0';
    else
    {
        int checkBit = 1 << 30;
        bool skipInitialZeros = true;
        // Check the sign bit separately, as 1<<31 will cause
        // +ve integer overflow
        if ((n & int.MinValue) == int.MinValue)
        {
            output[j++] = '1';
            skipInitialZeros = false;
        }
        for (int i = 0; i < 31; i++, checkBit >>= 1)
        {
            if ((n & checkBit) == 0)
            {
                if (skipInitialZeros)
                    continue;
                else
                    output[j++] = '0';
            }
            else
            {
                skipInitialZeros = false;
                output[j++] = '1';
            }
        }
    }
    return new string(output, 0, j);
}

Bovenstaande code is mijn implementatie. Dus ik hoor graag feedback 🙂


Antwoord 15

   // I use this function
    public static string ToBinary(long number)
    {
        string digit = Convert.ToString(number % 2);
        if (number >= 2)
        {
            long remaining = number / 2;
            string remainingString = ToBinary(remaining);
            return remainingString + digit;
        }
        return digit;
     }

Antwoord 16

       static void Main(string[] args) 
        {
        Console.WriteLine("Enter number for converting to binary numerical system!");
        int num = Convert.ToInt32(Console.ReadLine());
        int[] arr = new int[16];
        //for positive integers
        if (num > 0)
        {
            for (int i = 0; i < 16; i++)
            {
                if (num > 0)
                {
                    if ((num % 2) == 0)
                    {
                        num = num / 2;
                        arr[16 - (i + 1)] = 0;
                    }
                    else if ((num % 2) != 0)
                    {
                        num = num / 2;
                        arr[16 - (i + 1)] = 1;
                    }
                }
            }
            for (int y = 0; y < 16; y++)
            {
                Console.Write(arr[y]);
            }
            Console.ReadLine();
        }
        //for negative integers
        else if (num < 0)
        {
            num = (num + 1) * -1;
            for (int i = 0; i < 16; i++)
            {
                if (num > 0)
                {
                    if ((num % 2) == 0)
                    {
                        num = num / 2;
                        arr[16 - (i + 1)] = 0;
                    }
                    else if ((num % 2) != 0)
                    {
                        num = num / 2;
                        arr[16 - (i + 1)] = 1;
                    }
                }
            }
            for (int y = 0; y < 16; y++)
            {
                if (arr[y] != 0)
                {
                    arr[y] = 0;
                }
                else
                {
                    arr[y] = 1;
                }
                Console.Write(arr[y]);
            }
            Console.ReadLine();
        }           
    }

Antwoord 17

Dit kan handig zijn als je een beknopte functie wilt die je vanuit je hoofdmethode binnen je klasse kunt aanroepen. Mogelijk moet je nog steeds int.Parse(toBinary(someint))aanroepen als je een getal in plaats van een tekenreeks nodig hebt, maar ik vind dat deze methode redelijk goed werkt. Bovendien kan dit worden aangepast om een for-lus te gebruiken in plaats van een dowhileals je dat liever hebt.

   public static string toBinary(int base10)
    {
        string binary = "";
        do {
            binary = (base10 % 2) + binary;
            base10 /= 2;
        }
        while (base10 > 0);
        return binary;
    }

toBinary(10)retourneert de tekenreeks "1010".


Antwoord 18

Ik kwam dit probleem tegen in een coderingsuitdaging waarbij je decimaal van 32 cijfers naar binair moet converteren en de mogelijke combinatie van de subtekenreeks moet vinden.

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Numerics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
    class Program
    {
        public static void Main()
        {
            int numberofinputs = int.Parse(Console.ReadLine());
            List<BigInteger> inputdecimal = new List<BigInteger>();
            List<string> outputBinary = new List<string>();
            for (int i = 0; i < numberofinputs; i++)
            {
                inputdecimal.Add(BigInteger.Parse(Console.ReadLine(), CultureInfo.InvariantCulture));
            }
            //processing begins 
            foreach (var n in inputdecimal)
            {
                string binary = (binaryconveter(n));
                subString(binary, binary.Length);
            }
            foreach (var item in outputBinary)
            {
                Console.WriteLine(item);
            }
            string binaryconveter(BigInteger n)
            {
                int i;
                StringBuilder output = new StringBuilder();
                for (i = 0; n > 0; i++)
                {
                    output = output.Append(n % 2);
                    n = n / 2;
                }
                return output.ToString();
            }
            void subString(string str, int n)
            {
                int zeroodds = 0;
                int oneodds = 0;
                for (int len = 1; len <= n; len++)
                {
                    for (int i = 0; i <= n - len; i++)
                    {
                        int j = i + len - 1;
                        string substring = "";
                        for (int k = i; k <= j; k++)
                        {
                            substring = String.Concat(substring, str[k]);
                        }
                        var resultofstringanalysis = stringanalysis(substring);
                        if (resultofstringanalysis.Equals("both are odd"))
                        {
                            ++zeroodds;
                            ++oneodds;
                        }
                        else if (resultofstringanalysis.Equals("zeroes are odd"))
                        {
                            ++zeroodds;
                        }
                        else if (resultofstringanalysis.Equals("ones are odd"))
                        {
                            ++oneodds;
                        }
                    }
                }
                string outputtest = String.Concat(zeroodds.ToString(), ' ', oneodds.ToString());
                outputBinary.Add(outputtest);
            }
            string stringanalysis(string str)
            {
                int n = str.Length;
                int nofZeros = 0;
                int nofOnes = 0;
                for (int i = 0; i < n; i++)
                {
                    if (str[i] == '0')
                    {
                        ++nofZeros;
                    }
                    if (str[i] == '1')
                    {
                        ++nofOnes;
                    }
                }
                if ((nofZeros != 0 && nofZeros % 2 != 0) && (nofOnes != 0 && nofOnes % 2 != 0))
                {
                    return "both are odd";
                }
                else if (nofZeros != 0 && nofZeros % 2 != 0)
                {
                    return "zeroes are odd";
                }
                else if (nofOnes != 0 && nofOnes % 2 != 0)
                {
                    return "ones are odd";
                }
                else
                {
                    return "nothing";
                }
            }
            Console.ReadKey();
        }
    }
}

Antwoord 19

   int x=550;
    string s=" ";
    string y=" ";
    while (x>0)
    {
        s += x%2;
        x=x/2;
    }
    Console.WriteLine(Reverse(s));
}
public static string Reverse( string s )
{
    char[] charArray = s.ToCharArray();
    Array.Reverse( charArray );
    return new string( charArray );
}

Antwoord 20

Dit was een interessante lezing, ik was op zoek naar een snelle copy-paste.
Ik wist dat ik dit al lang geleden anders had gedaan met bitmath.

Dit was mijn mening.

// i had this as a extension method in a static class (this int inValue);
public static string ToBinaryString(int inValue)
{
    string result = "";
    for (int bitIndexToTest = 0; bitIndexToTest < 32; bitIndexToTest++)
        result += ((inValue & (1 << (bitIndexToTest))) > 0) ? '1' : '0';
    return result;
}

Je zou daar tussenruimte in kunnen stoppen met een beetje modulos in de lus.

       // little bit of spacing
        if (((bitIndexToTest + 1) % spaceEvery) == 0)
            result += ' ';

Je zou waarschijnlijk een stringbuilder kunnen gebruiken of doorgeven en direct toevoegen of indexeren om deallocaties te vermijden en ook het gebruik van += op deze manier te omzeilen;

Other episodes