Von einem Byte aus; Benötigen Sie zusätzliche CR in Base64 codierter MIME -Zeichenfolge zum Senden von E -Mail -AnhängenC++

Programme in C++. Entwicklerforum
Anonymous
 Von einem Byte aus; Benötigen Sie zusätzliche CR in Base64 codierter MIME -Zeichenfolge zum Senden von E -Mail -Anhängen

Post by Anonymous »

Ich habe alles funktioniert außer 1 Byte! Der PNG -Header hat einen 0x0d am 5. Byte. Wenn ich diese Base64 -Funktion benutze, wird dies irgendwie gestreift. Wenn ich den Anhang erhalte, kann ich ihn auf einem Linux -System anzeigen, aber unter Windows beschädigt. Weiß jemand, warum dies geschieht und wie kann ich sicherstellen, dass das 5. Byte nicht entfernt wird? < /P>

Code: Select all

const char base64_chars[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

std::string base64_encode_mime(const char* data, size_t data_len) {
std::string encoded_string;
int i = 0;
int j = 0;
unsigned char char_array_3[3];
unsigned char char_array_4[4];

// Process data in chunks of 3 bytes
while (data_len--) {
char_array_3[i++] = *(data++);
if (i == 3) {
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
char_array_4[1] = ((char_array_3[0] & 0x03) > 4);
char_array_4[2] = ((char_array_3[1] & 0x0f) > 6);
char_array_4[3] = char_array_3[2] & 0x3f;

for (i = 0; i < 4; i++) {
encoded_string += base64_chars[char_array_4[i]];
}
i = 0;
}
}

// Handle padding
if (i) {
for (j = i; j < 3; j++) {
char_array_3[j] = '\0';
}

char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
char_array_4[1] = ((char_array_3[0] & 0x03) > 4);
char_array_4[2] = ((char_array_3[1] & 0x0f) > 6);
char_array_4[3] = char_array_3[2] & 0x3f;

for (j = 0; j < i + 1; j++) {
encoded_string += base64_chars[char_array_4[j]];
}

while ((i++ < 3)) {
encoded_string += '=';
}
}

// Add MIME line breaks (e.g., every 76 characters)
std::string final_encoded_string;
for (size_t k = 0; k < encoded_string.length(); ++k) {
final_encoded_string += encoded_string[k];
if ((k + 1) % 76 == 0 && (k + 1) != encoded_string.length()) {
final_encoded_string += "\r\n"; // CRLF for MIME
}
}

return final_encoded_string;
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post