tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
750
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    simp simp ist offline Grünschnabel
    Registriert seit
    May 2009
    Beiträge
    3
    Ich habe einen System::String^ mit hexadezimalen Daten eines Bildes und möchte diesen in eine Datei hexadezimal schreiben, so dass am Ende wieder ein benutzbares Bild dabei herauskommt.
    Da ich an meinem ersten und vermutlich auch einzigem Projekt sitze, schaue ich doch eher verzweifelt in die Röhre. Ich bekomme zwar hin eine Datei aus diesen Daten zu erstellen, aber das ist dann nur eine Textdatei wo die eigentlichen hexadezimalen Daten drin stehen.

    Was muss ich tun um diesen String mit dem Inhalt
    424d46270000 ... ... 611461146118811c ... ... ...
    in eine Datei zu bekommen die dann auch wirklich diese Daten in hexadezimaler Betrachtung enthält, also:
    42 4D 46 27 00 00 ... ... 61 14 61 14 61 18 81 1C ... ....
     

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    und Willkommen bei Tutorials.de!

    Im Prinzip kannst Du die Datei einfach BINÄR schreiben!
    Also einen binären Filehandle definieren und füllen!

    Poste mal Deinen bisherigen Code (bitte mit CODE-Tags; der '#'-Button)! Wichtig wäre auch zu wissen, ob Du in C oder C++ unterwegs bist!

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  3. #3
    simp simp ist offline Grünschnabel
    Registriert seit
    May 2009
    Beiträge
    3
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
     
        String^ to_change = "6114|6118|811c|821c|a220|a224";
        String^ to_this = "";
        String^ pix_file = "C:\\source.bmp";
        int counter = 0;
        String^ modified = "";
     
        FileStream fs( pix_file, FileMode::Open );
        BinaryReader br( %fs );
     
        for ( __int64 i = 0, i_max = fs.Length; i < i_max; ++i )
        {
            unsigned char byte = br.ReadByte();
            to_this += byte.ToString( L"x2" );
            counter++;
     
            if ( counter == 2 )
            {
                if ( to_change->Contains( to_this ) )
                {
                    to_this = "ffff";
                }
                modified += to_this;
                to_this = "";
                counter = 0;
            }
        }
     
        br.Close();
        fs.Close();
     
        if ( File::Exists( "C:\\dest.bmp" ) )
        {
            File::Delete( "C:\\dest.bmp" );
        }


    Soviel zum bisherigen Stand ... das Ergebnis in "modified" muss jetzt wieder in eine Datei und diese sollte wieder ein Bild ergeben.
    Am einfachsten wäre wohl, die hexdaten wieder zu schreiben ...

    Achso: CPP ...
    Geändert von simp (04.05.09 um 16:30 Uhr)
     

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    mal dumm gefragt: bist Du sicher, dass Du hier bei "VisualStudio/MFC" richtig bist? ? ?

    Irgendwie ist "String^" nicht wirklich C++, dort sollte es eigentlich "string *" heissen ......

    Wo genau ist denn nun Dein Problem?
    Gibt es keinen BinaryWriter, mit dem Du Dein "modified" schreiben kannst ? ? ?

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Zitat Zitat von vfl_freak Beitrag anzeigen
    mal dumm gefragt: bist Du sicher, dass Du hier bei "VisualStudio/MFC" richtig bist? ? ?
    Ich denke auch, dass .NET-Forum passt besser.

    Hallo simp,
    du musst den String wieder in ein Byte-Array konvertieren und kannst die Daten dann mit BinaryWriter wegschreiben:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    String ^str = "424d46270000";
     
    // Umwandeln in ein Byte-Array
     
    int nSize = str->Length / 2;
    array<Byte> ^aBuffer = gcnew array<Byte>(nSize);
     
    for( int i = 0; i < nSize; i++ )
    {
        aBuffer[i] = Convert::ToByte(str->Substring(i * 2, 2), 16);
    }
     
    // Schreiben in Datei
     
    BinaryWriter^ oWriter = gcnew BinaryWriter(File::Open("C:\\Temp\\Test.bin", FileMode::Create));
    oWriter->Write(aBuffer);
    oWriter->Close();
    Evt. solltest du mal überlegen, wie du ohne die Hin- und Herwandlung in Strings auskommen kannst, da du ja ohnehin nur die Binärdaten bearbeitest.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  6. #6
    simp simp ist offline Grünschnabel
    Registriert seit
    May 2009
    Beiträge
    3
    Nein ... natürlich bin ich nicht sicher ob ich im richtigen Forum bin . Ist wie gesagt mein erstes und vermutlich auch einziges Projekt bisher. Das bisschen was ich über Programmierung weiss kommt aus HTML und ne handvoll PHP.
    Wollte mir nur mal ne Kleinigkeit basteln

    Das hier ist letztendlich der Code der das erhoffte Ergebnis bringt:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
        int nSize = modified->Length / 2;
        array<Byte> ^aBuffer = gcnew array<Byte>( nSize );
     
        for( int i = 0; i < nSize; i++ )
        {
            aBuffer[i] = Convert::ToByte( modified->Substring( i * 2, 2 ), 16 );
        }
     
        FileStream ws( "C:\\dest.bmp", FileMode::Create );
        BinaryWriter wr( %ws );
        wr.Write( aBuffer );
        wr.Close();
        ws.Close();

    Wie man sieht noch ein klein wenig verändert. Aber wo wir gerade dabei sind, könnt ihr mir sagen worin die Unterschiede der verschiedenen Sprachen liegen, bzw. woran ich sie erkenne ? Am besten wäre natürlich ein Link zum selber nachlesen

    Ansonsten danke für Eure Hilfe, klappt wunderbar.
     

Ähnliche Themen

  1. In csv-Dateien schreiben, wie?
    Von cipoint im Forum Java
    Antworten: 2
    Letzter Beitrag: 27.05.06, 19:35
  2. In Dateien schreiben und Dateien auslesen (z.B. User + Pwd)
    Von NeoHeadquarter im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 09.05.06, 13:44
  3. Schreiben von Dateien
    Von bloodyjens im Forum Flash Plattform
    Antworten: 3
    Letzter Beitrag: 04.06.04, 13:35
  4. TXT Dateien Lesen und Schreiben.
    Von Lukasz im Forum PHP
    Antworten: 1
    Letzter Beitrag: 02.11.03, 01:04
  5. In Dateien schreiben
    Von MTK im Forum PHP
    Antworten: 8
    Letzter Beitrag: 14.04.02, 22:26