tipo parse net ejemplo convertir como asp c# string binary integer

net - int.parse c#



Cadena binaria a entero (2)

Gracias por la gran e increíblemente rápida respuesta!

Lamentablemente mis necesidades cambiaron. Ahora el usuario puede ingresar prácticamente cualquier formato. Binario, Decimal, Hex. Así que decidí intentarlo: catch solo proporciona la solución más simple y limpia.

Así que, por si acaso, estoy publicando el código que estoy usando ahora. Creo que es bastante claro e incluso algo elegante, o eso creo ^^.

switch (format) { case VariableFormat.Binary: try { result = Convert.ToInt64(value, 2) } catch { // error handling } break; case VariableFormat.Decimal: try { result = Convert.ToInt64(value, 10) } catch { // error handling } break; case VariableFormat.Hexadecimal: try { result = Convert.ToInt64(value, 16) } catch { // error handling } break; }

Así que gracias por animarme a usar try - catch, creo que realmente mejoró la legibilidad de mi código.

Gracias

Tengo una cadena binaria, ingresada por el usuario, que necesito convertir a un entero.

Al principio usé ingenuamente esta simple línea:

Convert.ToInt32("11011",2);

Desafortunadamente, esto produce una excepción si el usuario ingresa el número entero directamente.

Convert.ToInt32("123",2); // throws Exception

¿Cómo puedo asegurarme de que la cadena introducida por el usuario sea realmente una cadena binaria?

  • Intenta ... captura ... pero eso es demasiado feo.
  • algo así como ''Int32.TryParse'' tal vez.

Gracias


Podría usar un Regex para verificar que es "^ [01] + $" (o mejor, "^ [01] {1,32} $"), y luego usar Convert ?

Por supuesto, las excepciones probablemente no sean un gran problema de todos modos. ¿Poco elegante? tal vez. Pero funcionan.

Ejemplo (formateado para espacio vertical):

static readonly Regex binary = new Regex("^[01]{1,32}$", RegexOptions.Compiled); static void Main() { Test(""); Test("01101"); Test("123"); Test("0110101101010110101010101010001010100011010100101010"); } static void Test(string s) { if (binary.IsMatch(s)) { Console.WriteLine(Convert.ToInt32(s, 2)); } else { Console.WriteLine("invalid: " + s); } }