none
Convertir un string (textBox) de numeros Hexadecimales (21 2a 05 1f 3f 6d 45 6a 39 a8....) en codigo ASCII ( q u } ÿ..., los caracteres que van desde el 00 al FF) en lenguaje C# RRS feed

  • Pregunta

  • Hola muy buenas noches, me llamo Jose y tengo un problema en una parte de un programa que estoy haciendo en c#, en la que tengo un textBox(x).Text con una serie de numeros hexadecimales separados con tres espacios (12   3A   1F   45   9F   3D   FF   9A....), lo que necesito es pasarlos a ASCII y mostrarlos en otro textBox(x').Text. Pero usando el siguiente código:

    public void ConvertHex(String hexString)
        {
            StringBuilder sb = new StringBuilder();
    
            for (int i = 0; i < hexString.Length; i += 2)
            {
                String hs = hexString.Substring(i, i + 2);
                System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString();
            }
            String ascii = sb.ToString();
            MessageBox.Show(ascii);
        }

    tengo el problema de que al usar la conversión .ToUint32 en base 16, o .ToInt32 en base 16 solo me convierte los primeros 4 bytes, es decir: 12   3A   1F   45, si reemplazo los tres espacios  ("   ", "") me queda 123A1F45, que en ascii sería: ":E". ¿Pero y que pasa con el resto de números hexadecimales??, ese es mi problema que quiero convertir una cadena mas larga de lo que me permite el Int32, 16. 

    Ojala alguien me pueda echar una mano, que soy algo novatillo y necesito solucionar ese pequeño problema.

    Muchas gracias de todas formas.

    Jose Ortega.

    sábado, 8 de marzo de 2014 22:35

Todas las respuestas

  • using System;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Globalization;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                string original = "12   3A   1F   45   9F   3D   FF   9A";
                MatchCollection mc = Regex.Matches(original, "\\b\\w{2}");
                byte[] b = mc.Cast<Match>().Select(m => byte.Parse(m.Value, NumberStyles.AllowHexSpecifier)).ToArray();
                string s = Encoding.GetEncoding(437).GetString(b);
    
                Console.WriteLine("{0}   {1}", original, s);
    
                Console.ReadKey();                
    
            }
        }
    }
    

    sábado, 8 de marzo de 2014 23:17
  • Hola Walter Miguel, con la función:

    MatchCollection mc = Regex.Matches(original, "\\b\\w{2}");

    me busca en el textBox de entrada los caracteres contenidos en el string original. Pero lo que pretendo no es convertir a ascci solo esos, sino el textBox de entrada con todos los caracteres que contenga, ya que ese textBox me lee un cierto rango acotado por mi, de byts[].

    Tengo dos textBox, en el primero tengo 10, 100 o 1000 byts[] que leo de un archivo, de caracter hexadecimal como pueden ser(12   3a   25   ff   9a .............), y lo que quiero es pasar todos los byts[] de ese textbox al formato ascii y mostrarlos en un segundo textBox.

    Muchas gracias de nuevo, por tu ayuda.


    domingo, 9 de marzo de 2014 18:10
  • Vale problema solucionado!!!!. Thanks XD.
    lunes, 10 de marzo de 2014 0:08