2010-02-19 3 views
30

Ich versuche, eine Funktion zu schreiben, die eine Zeichenfolge in ein Base64-Byte-Array konvertiert. Ich habe mit diesem Ansatz versucht:Wie konvertiert man String zu Base64 Byte-Array, wäre dies gültig?

public byte[] stringToBase64ByteArray(String input) 
{ 
    byte[] ret = System.Text.Encoding.Unicode.GetBytes(input); 
    string s = Convert.ToBase64String(input); 
    ret = System.Text.Encoding.Unicode.GetBytes(s); 
    return ret; 
} 

Würde diese Funktion ein gültiges Ergebnis erzeugen (sofern die Zeichenfolge in Unicode ist)? Danke!

+1

Was genau ist ein Base64-Byte-Array? baseNN gilt für Textdarstellungen. –

+1

@Henk: Ich denke, er meint eine Base64-Zeichenfolge in ein Byte-Array konvertiert. – Bobby

+0

ToBase64String erwartet den Typ byte [], während Sie die Zeichenfolge – Adeel

Antwort

18

Sieht gut aus, obwohl der Ansatz seltsam ist. Verwenden Sie jedoch Encoding.ASCII.GetBytes(), um die Base64-Zeichenfolge in Byte [] zu konvertieren. Die Base64-Codierung enthält nur ASCII-Zeichen. Mit Unicode erhalten Sie ein zusätzliches 0 Byte für jedes Zeichen.

+0

Danke! Ich werde Ihrem Rat folgen und stattdessen Encoding.ASCII.GetBytes() verwenden. –

2

Die Darstellung einer Zeichenkette als Blob, die als Zeichenkette dargestellt wird, ist merkwürdig ... Sie können die Zeichenkette nicht einfach direkt verwenden?

Die Zeichenfolge ist immer Unicode; Es sind die codierten Bytes, die sich ändern. Da base-64 immer < 128 ist, scheint die Verwendung von Unicode im letzten Teil übertrieben zu sein (es sei denn, das ist, was das Drahtformat verlangt). Persönlich würde ich UTF8 oder ASCII für die letzte GetBytes verwenden, so dass jedes Base-64-Zeichen nur ein Byte braucht.

+1

angeben Ja, es ist ungerade. Der Grund, warum ich es mache, ist, weil ich Aufrufe in eine API eines alten Legacy-Systems mache, das aus irgendeinem Grund die Strings als Base64-Byte-Arrays übergeben möchte. –

0

Alle Zeichenfolgen in .NET sind Unicode. Dieser Code erzeugt ein gültiges Ergebnis, aber der Consumer der BASE64-Zeichenfolge sollte ebenfalls Unicode-fähig sein.

0

Ja, es würde eine Base64-codierte Zeichenfolge der UTF-16-Little-Endian-Darstellung Ihrer Quellzeichenfolge ausgeben. Beachten Sie, dass AFAIK normalerweise nicht UTF-16 in base64 verwendet. Normalerweise wird ASCII oder UTF-8 verwendet. Wichtig ist hier jedoch, dass Sender und Empfänger sich einig sind, welche Kodierung verwendet werden muss.

Ich verstehe nicht, warum Sie die Base64-Zeichenfolge in Array von Bytes umwandeln: base64 wird verwendet, um Inkompatibilitäten bei der Codierung Codierung zu vermeiden, so sollten Sie als String beibehalten und geben Sie es in dem Format von dem Protokoll verwendet um die Daten zu übertragen. Und, wie Marc sagte, es ist definitiv übertrieben, UTF-16 für diesen Zweck zu verwenden, da base64 nur 64 Zeichen enthält, alles unter 128.

52

können Sie verwenden:

Von byte [] zu string:

byte[] array = somebytearray;

string result = Convert.ToBase64String(array);

Von String byte []:

array = Convert.FromBase64String(result);

Verwandte Themen