Convertir binario a int sin Convert.ToInt32
-
28-09-2019 - |
Pregunta
I necesita convertir 10100101
binario a un número entero en C # sin utilizar Convert.ToInt64 (bin, 2), estoy trabajando con el marco micro .NET. Cuando uso int i = Convert.ToInt32(byt, 2);
se produce una excepción con el mensaje en lugar de nada servicial:
#### Exception System.ArgumentException - 0x00000000 (1) ####
#### Message:
#### System.Convert::ToInt32 [IP: 000d] ####
#### TRNG.Program::loop [IP: 0047] ####
#### TRNG.Program::Main [IP: 0011] ####
A first chance exception of type 'System.ArgumentException' occurred in mscorlib.dll
An unhandled exception of type 'System.ArgumentException' occurred in mscorlib.dll
Solución
Un poco más rápido que la opción de Femaref, ya que no requiere una llamada al método molestos, y los usos o en lugar de ADD sólo por diversión:
public static int ParseBinary(string input)
{
// Count up instead of down - it doesn't matter which way you do it
int output = 0;
for (int i = 0; i < input.Length; i++)
{
if (input[i] == '1')
{
output |= 1 << (input.Length - i - 1);
}
}
return output;
}
Es posible que desee:
- Compruebe que la longitud es inferior a 32 para comenzar con
- Compruebe que cada personaje es '0' o '1'
Sólo por LOLS, aquí está una versión de LINQ:
public static int ParseBinary(string input)
{
return input.Select((c, index) => new { c, index })
.Aggregate(0, (current, z) => current | (z.c - '0') <<
(input.Length - z.index - 1));
}
O todavía más ordenado:
public static int ParseBinary(string input)
{
return return input.Aggregate(0, (current, c) => (current << 1) | (c - '0'));
}
Otros consejos
string input = "10101001";
int output = 0;
for(int i = 7; i >= 0; i--)
{
if(input[7-i] == '1')
output += Math.Pow(2, i);
}
en general:
string input = "10101001";
int output = 0;
for(int i = (input.Length - 1); i >= 0; i--)
{
if(input[input.Length - i] == '1')
output += Math.Pow(2, i);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow