2010-02-25 5 views
17

Avevo pensato che Convert.ToBase64String() fosse il metodo da utilizzare per creare una stringa base64 di un array di byte, ma recentemente mi sono imbattuto in BitConverter.ToString(). Qual è la differenza tra i due?BitConverter.ToString() vs Convert.ToBase64String()

E più precisamente, quando si dovrebbe essere usato sopra l'altro?


Per esempio in this question di creare un digest MD5, un commento di CraigS su una risposta Stati "ToBase64String non restituisce quello che voglio. Tuttavia, BitConverter.ToString intorno l'array di byte fa il trucco."

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

vs

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

Inoltre, quello che dovrebbe essere usato per codificare le immagini in Base64?

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 (esadecimale) rispetto alla base 64! ovviamente la base 64 della stringa convertita sarà più piccola. – Fakrudeen

risposta

11

Da MSDN per Convert.ToBase64String:

La base-64 cifre in ordine crescente dallo zero sono i caratteri maiuscoli "A" a "Z", i caratteri minuscoli "a" alla "z", i numeri "0" a "9", ed i simboli "+" e "/". Il carattere senza valore , "=", viene utilizzato per il riempimento finale di .

Il wikipedia article on Base64 è molto più illuminante su come funziona l'algoritmo realtà opere.

Il BitConverter prende il valore esadecimale di ogni byte come due cifre e le aggiunge una dopo l'altra separate da un trattino.

Entrambi possono essere convertiti in entrambe le direzioni.

Per facilitare la lettura, il BitConverter batte la stringa Base64 ogni giorno, ma la stringa Base64 è più compatto.

12

BitConverter.ToString non codifica Base64, converte in esadecimale sillabato (Base 16 con trattini tra ogni byte).

In definitiva, utilizzare quello che ha senso per un particolare utilizzo. Se invii bit su un supporto di testo (ad esempio http) usa Base64, poiché dovrai trasmettere meno dati complessivi.

Se si desidera visualizzare solo una rappresentazione di testo di alcuni dati binari all'utente, è possibile utilizzare BitConverter.ToString().

7

Lo ToString method on BitConverter fornirà l'array di byte in una rappresentazione esadecimale (base 16).

Il ToBase64String method on the Convert class ti darà un base 64-encoded string.

Entrambi eseguono la funzione di conversione di una matrice di byte in una rappresentazione di stringa che può quindi essere invertita (non è una trasformazione unidirezionale).

In genere è preferibile utilizzare il metodo ToBase64String su Convert se si hanno dubbi sulla lunghezza della stringa risultante. Poiché base-64 può avere un personaggio nella base che rappresenta un numero maggiore di valori (4x in più rispetto alla base-16), può rappresentare un numero elevato utilizzando un numero inferiore di caratteri.

Se si è preoccupati della leggibilità (ad esempio, la visualizzazione dei byte in un file in un programmatore o una visualizzazione in cui verranno visualizzati i dati dei byte), allora ha più senso utilizzare il metodo ToString su BitConverter, come la maggior parte delle persone è abituata a visualizzare i dati dei byte in formato esadecimale (base 16).

+1

+1 per eccellenti spiegazioni sui possibili motivi per utilizzare l'uno o l'altro. – Randolpho

Problemi correlati