17 ответов:
ваш пример имеет целое число, выраженное в виде строки. Допустим, число было на самом деле целое число, и вы хотите взять целое число и преобразовать его в двоичное число.
int value = 8; string binary = Convert.ToString(value, 2);который возвращает 1000.
преобразование из любой классической базы в любую базу в 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
очень просто без дополнительного кода, просто ввод, преобразование и вывод.
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); } } }
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; }
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.
примитивным образом:
public string ToBinary(int n) { if (n < 2) return n.ToString(); var divisor = n / 2; var remainder = n % 2; return ToBinary(divisor) + remainder; }
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; }
Я знаю, что этот ответ будет похож на большинство ответов уже здесь, но я заметил, что почти ни один из них не использует цикл for. Этот код работает, и его можно считать простым, в том смысле, что он будет работать без каких-либо специальных функций, таких как ToString() с параметрами, а также не слишком долго. Возможно, некоторые предпочитают for-loops вместо просто while-loop, это может быть подходящим для них.
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; }
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
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; } }изучение источников:
все, что вам нужно знать о binary https://www.mathsisfun.com/binary-number-system.html
все, что вам нужно знать и многое другое - в том числе алгоритм преобразования десятичной в двоичную http://www.electronics-tutorials.ws/binary/bin_2.html
эта функция преобразует целое число в двоичный код в 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; }
// 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; }
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(); } }
ОУЗ, предусмотренного
Convert.ToString(n, 2)это хорошо, но в случае, если вам нужна альтернативная реализация, которая на несколько тиков быстрее, чем BCL, предоставленный один.следующая пользовательская реализация работает для всех целых чисел (- ve и +ve). Исходный источник, взятый из https://davidsekar.com/algorithms/csharp-program-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); }выше код-это моя реализация. Так что, я очень хочу услышать любую обратную связь:)
еще одна альтернатива, но также встроенное решение:
int number = 25; string binary = Enumerable.Range(0, (int) Math.Log(number, 2) + 1).Aggregate(string.Empty, (collected, bitshifts) => (number >> bitshifts) % 2 + collected);
это может быть полезно, если вы хотите краткую функцию, которую вы можете вызвать из вашего основного метода, внутри вашего класса. Возможно, Вам все еще нужно позвонить
int.Parse(toBinary(someint))Если вам требуется число вместо строки, но я считаю, что этот метод работает довольно хорошо. Кроме того, это можно настроить для использованияforпетли вместоdo-whileесли вы предпочитаете.public static string toBinary(int base10) { string binary = ""; do { binary = (base10 % 2) + binary; base10 /= 2; } while (base10 > 0); return binary; }
toBinary(10)возвращает строку"1010".
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 ); }
Comments