2010-02-25 12 views
17

Pensé que Convert.ToBase64String() era el método a usar para crear una cadena base64 de una matriz de bytes, pero recientemente me encontré con BitConverter.ToString(). ¿Cuál es la diferencia entre los dos?BitConverter.ToString() vs Convert.ToBase64String()

Y más específicamente, ¿cuándo se debe usar uno sobre el otro?


Por ejemplo, en this question trata de crear un resumen MD5, un comentario de CraigS en una respuesta estados "ToBase64String no devuelve lo que quiero. Sin embargo, BitConverter.ToString alrededor de la matriz de bytes hace el truco."

BitConverter.ToString(
    MD5.Create().ComputeHash(Encoding.Default.GetBytes(StringToEncode)) 
).Replace("-", "") 

vs

Convert.ToBase64String(
    MD5.Create().ComputeHash(Encoding.Default.GetBytes(StringToEncode)) 
) 

Además, lo que se debe utilizar para codificar imágenes para base 64?

public string ImageToBase64(int Img_ID) 
{ 
    byte[] tempBytes = showImageById(Img_ID); // get image from DB 
    return Convert.ToBase64String(tempBytes); 
} 

vs

public string ImageToBase64(int Img_ID) 
{ 
    byte[] tempBytes = showImageById(Img_ID); // get image from DB 
    return BitConverter.ToString(tempBytes).Replace("-", ""); 
} 
+1

base 16 (hex) frente a base 64! obviamente la cadena convertida en base 64 será más pequeña. – Fakrudeen

Respuesta

11

De MSDN para Convert.ToBase64String:

La base-64 dígitos en orden ascendente de cero son los caracteres en mayúsculas "A" a la "Z", los caracteres en minúscula "a" a "z", los números "0" a "9", y los símbolos "+" y "/". El carácter sin valor , "=", se usa para relleno posterior.

El wikipedia article on Base64 es mucho más esclarecedor acerca de cómo el algoritmo realidad obras.

El BitConverter toma el valor hexadecimal de cada byte como dos dígitos y los agrega uno detrás del otro separados por un guión.

Ambos se pueden convertir en ambos sentidos.

Para legibilidad, el BitConverter supera a la cadena Base64 cualquier día, pero la cuerda Base64 es más compacta.

12

BitConverter.ToString no codifica Base64, se convierte en hexadecimal con guiones (Base 16 con guiones entre cada byte).

Al final, use el que tenga sentido para su uso particular. Si está enviando bits a través de un medio de texto (por ejemplo, http), use Base64, ya que tendrá que transmitir menos datos generales.

Si solo desea mostrar una representación de texto de algunos datos binarios al usuario, puede usar BitConverter.ToString().

7

El ToString method on BitConverter le dará la matriz de bytes en una representación hexadecimal (base 16).

El ToBase64String method on the Convert class le dará un base 64-encoded string.

Ambos realizan la función de convertir una matriz de bytes en una representación de cadena que luego puede invertirse (no se trata de una transformación de una vía).

Por lo general es mejor utilizar el método ToBase64String en Convert si usted tiene preocupaciones acerca de la longitud de la cadena resultante. Como base-64 puede tener un carácter en la base que represente un mayor número de valores (4 veces más que la base-16), puede representar un número grande con un número menor de caracteres.

Si le preocupa la legibilidad (por ejemplo, mostrar los bytes en un archivo a un programador o una pantalla donde se mostrarán datos de bytes), tiene más sentido utilizar el método ToString en BitConverter, como la mayoría de la gente está acostumbrada a ver datos de bytes en formato hexadecimal (base-16).

+1

+1 para obtener excelentes explicaciones de las posibles razones para usar una u otra. – Randolpho

Cuestiones relacionadas