Base64 codiert mit Boost-Throw-Ausnahme

7

Ich versuche Boost Base64 Encoder zu verwenden, ich habe ein Beispiel gefunden, aber ich habe und Ausnahme

%Vor%

ich habe

benutzt %Vor%

Ich verstehe es

  

Nicht behandelte Ausnahme bei 0x75b1b9bc in Agentid_coder.exe: Microsoft C ++   Ausnahme: boost :: archive :: iterators :: dataflow_exception im Speicher   Standort 0x0046ed94 ..

Ich habe diese Problemumgehung gefunden, aber ich bekomme das gleiche Ergebnis

%Vor%

Ich verwende MSVS2008 und boote 1.38

    
Agus 09.05.2012, 18:01
quelle

1 Antwort

28

Leider ist die Kombination der beiden iterator_adaptors binary_from_base64 und transform_width kein kompletter Base64 Encoder / Decoder. Base64 stellt Gruppen von 24 Bits (3 Bytes) als 4 Zeichen dar, von denen jedes 6 Bits codiert. Wenn die Eingangsdaten kein ganzzahliges Vielfaches von solchen 3-Byte-Gruppen sind, müssen sie mit einem oder zwei Nullbytes aufgefüllt werden. Um anzuzeigen, wie viele Füllbytes hinzugefügt wurden, werden ein oder zwei = -Zeichen an die codierte Zeichenfolge angehängt.

transform_width , das für die Umwandlung der 8-Bit-Binärdatei in 6-Bit-Ganzzahlen verantwortlich ist, wendet diese Auffüllung nicht automatisch an, sondern muss vom Benutzer ausgeführt werden. Ein einfaches Beispiel:

%Vor%

Beachten Sie, dass ich die Iteratoren insert_linebreaks und remove_whitespace hinzugefügt habe, so dass die Ausgabe von base64 schön formatiert ist und Base64-Eingaben mit Zeilenumbrüchen dekodiert werden können. Diese sind jedoch optional.

Führen Sie verschiedene Eingabezeichenfolgen aus, die eine andere Auffüllung erfordern:

%Vor%

Sie können die base64-Strings mit diesem Online-Encoder / Decoder überprüfen.

>     
PiQuer 11.06.2012, 00:04
quelle

Tags und Links