Datei in Text konviertieren



  • Abend 🙂

    ich würde gerne eine Datei in einen Text umwandeln, und dann wieder zurück.

    Als Beispiel würde die Datei test.jpg dann der String "01010101000001110101010 Sein :)" ist das Möglich?

    #include <windows.h>
    #include <iostream>
    #include <fstream>
    
    int main() {
        // Datei öffnen
        HANDLE hFile = CreateFile(TEXT("1.mp3"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if(hFile == INVALID_HANDLE_VALUE) {
            std::cout << "Datei konnte nicht geöffnet werden!" << std::endl;
            return EXIT_FAILURE;
        }
    
        // Dateigröße ermitteln
        DWORD dwFileSize = GetFileSize(hFile, NULL);
    
        // Speicher für Buffer reservieren
        LPTSTR pszBuffer = new TCHAR[dwFileSize + 1];
    
        // Datei auslesen
        DWORD dwBytesRead = 0;
        ReadFile(hFile, pszBuffer, dwFileSize, &dwBytesRead, NULL);
        pszBuffer[dwBytesRead] = '\0';
    
        // Datei schließen
        CloseHandle(hFile);
    
        // Neue Datei schreiben
        DWORD dwBytesWritten = 0;
        HANDLE hNewFile = CreateFile(TEXT("2.mp3"), GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        WriteFile(hNewFile, pszBuffer, dwBytesRead, &dwBytesWritten, NULL);
        CloseHandle(hNewFile);
    
        // Buffer freigeben
        delete[] pszBuffer;
    
        return EXIT_SUCCESS;
    }
    

    Hiermit kopiere ich eine Datei. Das ist mir bewusst, ist auch gar nicht schwer.
    Nur wie kann ich jetzt den Buffer in einen String konvertieren?

    Wenn ich mir pszBuffer ausgeben lasse erhalte ich

    ÿØÿà
    

    Also die ersten lesbaren Zeichen der Datei welche diese als JPEG-Bild identifizieren. Aber ich möchte ja alle Daten in einen String umwandeln, welchen ich beliebig über z.B. ein Kontaktformular weitergeben kann, welcher dann auch wieder dekodiert werden kann 😕



  • Aber das was du da erhälst ist doch der String.

    Ich glaub beim Konvertieren fasst er immer 8 Bits zu einem Byte zusammen für ein Char und da kommen dann die entsprechenden Zeichen aus der Ansitabelle raus.



  • Die Daten liegen in Binärer Form vor, deshalb musst du über einen Zwischenschritt die Daten in lesbare Zeichen umwandeln. Hier kannst du zum Beispiel Base64 verwenden.


Log in to reply