ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
750
750
EMPFEHLEN
-
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 ... ....
-
04.05.09 15:30 #2
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ß
KlausEs 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 !!
-
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)
-
04.05.09 16:56 #4
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ß
KlausEs 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 !!
-
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:
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.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();
Gruß
MCoder"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
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
-
In csv-Dateien schreiben, wie?
Von cipoint im Forum JavaAntworten: 2Letzter Beitrag: 27.05.06, 19:35 -
In Dateien schreiben und Dateien auslesen (z.B. User + Pwd)
Von NeoHeadquarter im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 09.05.06, 13:44 -
Schreiben von Dateien
Von bloodyjens im Forum Flash PlattformAntworten: 3Letzter Beitrag: 04.06.04, 13:35 -
TXT Dateien Lesen und Schreiben.
Von Lukasz im Forum PHPAntworten: 1Letzter Beitrag: 02.11.03, 01:04 -
In Dateien schreiben
Von MTK im Forum PHPAntworten: 8Letzter Beitrag: 14.04.02, 22:26





Zitieren


Login






