2011-10-24 26 views
8

Duplicar posibles:
How do you convert Byte Array to Hexadecimal String, and vice versa, in C#?
Convert hex string to byte arraycadena de matriz de bytes

He una cadena como esta: "021500010000146DE6D800000000000000003801030E9738"

Lo que necesito es el siguiente matriz de bytes: 02 15 00 01 00 00 14 6D E6 D 8 00 00 00 00 00 00 00 00 38 01 03 0E 97 38 (cada par de números es el valor hexadecimal en el byte respectivo).

¿Alguna idea sobre cómo puedo hacer esta conversión? ¡¡Gracias!!

+0

¿Usted a escribir para hacer algo? –

+1

El "posible duplicado" es una pregunta completamente diferente. Él no está preguntando cómo codificar la cadena en un 'byte []' usando alguna codificación. La cadena aquí contiene valores hexadecimales que se deben convertir a 'byte []'. – svick

+0

No veo cómo estas preguntas son duplicados exactos. – vcsjones

Respuesta

5
var arr = new byte[s.Length/2]; 
for (var i = 0 ; i<arr.Length ; i++) 
    arr[i] = (byte)Convert.ToInt32(s.SubString(i*2,2), 16); 
+0

Este código está funcionando realmente bien. Pero solo un detalle, el código correcto es "s.Substring". Gracias a todos. – Manu

+0

Puede usar Convert.ToByte en lugar de ToInt32. – mikeazo

1

Más o menos, desea que el segundo ejemplo en este page.
La parte importante es:

Convert.ToInt32(hex, 16); 

El primer parámetro es una cadena de 2-carácter, la especificación de un valor hexadecimal (por ejemplo "DE").
El segundo parámetro especifica convertir desde Base-16, que es hexadecimal.

La división de la cadena en segmentos de dos caracteres no se muestra en el ejemplo, pero es necesaria para su problema. Confío en que es lo suficientemente simple para que lo manejes.

me encontré con este Google: "C# parse hex"

1
string str = "021500010000146DE6D800000000000000003801030E9738"; 
    List<byte> myBytes = new List<byte>(); 

    try 
    { 
     while (!string.IsNullOrEmpty(str)) 
     { 
      myBytes.Add(Convert.ToByte(str.Substring(0, 2), 16)); 
      str = str.Substring(2); 
     } 
    } 
    catch (FormatException fe) 
    { 
     //handle error 
    } 
    for(int i = 0; i < myBytes.Count; i++) 
    { 
     Response.Write(myBytes[i].ToString() + "<br/>"); 
    } 
+0

'Convert.ToByte' en un 'int'? Quiero decir, la optimización prematura es mala y todo, pero cuando el enfoque más simple también es más rápido ... –

+0

@BenVoigt Ah, encontré esa función correcta para hacer en una conversión. ¡Gracias! –

Cuestiones relacionadas