none
Pasar un string a un array de bytes en Visual c# RRS feed

  • Pregunta

  • Buenas tardes,

    Estoy intentando pasar un string con el siguiente formato:

    string datos = "00:DD:EE:00:DA:00:00:00";


    a un array de bytes de la siguiente manera. ¿Alguien me podría ayudar?

    byte[] miArray = new byte[]{0x00,0xDD,0xEE,0x00,0xDA,0x00,0x00,0x00};

    Lenguaje C#.

    He conseguido dividir el string mediante split y obtener un array de strings:

    string[] miCadena;
    miCadena = datos .Split(':');

    Pero ahora no consigo pasar el array de strings al array de bytes.

    Gracias de antemano.

    miércoles, 12 de diciembre de 2012 19:20

Respuestas

  • Debes indicar al parser que el texto contiene un valor hexadecimal... así

    string datos = "00:DD:EE:00:DA:00:00:00";
    string[] miCadena;
    miCadena = datos.Split(':');
     
    byte[] miArray = new byte[miCadena.Length];
     			
    for (int k = 0; k < miArray.Length; k++)
    {
    	miArray[k] = byte.Parse(miCadena[k], System.Globalization.NumberStyles.AllowHexSpecifier);
    }
    

    • Marcado como respuesta Arlonso jueves, 13 de diciembre de 2012 7:05
    miércoles, 12 de diciembre de 2012 21:44

Todas las respuestas

  • Hola,

    Pero cual es el objetivo ?

    Si quieres pasar todos los caracteres a un arreglo, usa un char:

    string datos = "00:DD:EE:00:DA:00:00:00";
    char[] miArray = datos.ToCharArray();


    Un saludo,
    Cristian Pérez
    Blog

    miércoles, 12 de diciembre de 2012 20:54
  • Debes indicar al parser que el texto contiene un valor hexadecimal... así

    string datos = "00:DD:EE:00:DA:00:00:00";
    string[] miCadena;
    miCadena = datos.Split(':');
     
    byte[] miArray = new byte[miCadena.Length];
     			
    for (int k = 0; k < miArray.Length; k++)
    {
    	miArray[k] = byte.Parse(miCadena[k], System.Globalization.NumberStyles.AllowHexSpecifier);
    }
    

    • Marcado como respuesta Arlonso jueves, 13 de diciembre de 2012 7:05
    miércoles, 12 de diciembre de 2012 21:44
  • Gracias a todos por la ayuda.

    El objetivo es transformar la cadena introducida en una base de datos como texto, que es la dirección de un dispositivo de RadioFrecuencia,  a bytes para el ensamblado del mensaje a enviar.

    Al final también encontré la siguiente forma, que no me iba por no añadir el indicador hex 16.

    string miCadena = "00:00:22:FF:DA:00:00:33";

    string[] miCadena2= (miCadena.Split(':'));

    byte[] miDireccion= new byte[miCadena2.Length];

    for(int i=0;i<miCadena2.Length;i++)

    miDireccion[i]=Convert.ToByte(miCadena2[i],16);

    //Output: 0 0 34 255 218 0 0 51

    De todas formas, ¿Se podría dar formato Hexadecimal al valor guardado o da igual?

    Ej: FF en vez de 255.


    • Editado Arlonso jueves, 13 de diciembre de 2012 7:24
    jueves, 13 de diciembre de 2012 7:12