Cos Geschrieben 26. Juli 2005 Teilen Geschrieben 26. Juli 2005 Hallo, ich habe folgendes Problem. Ich möchte eine Datei auslesen und die Zeichenfolge zu je 4 oder 2 byte in eine XML-Datei schreiben. doch leider schreibt mir mein Programm nur die Bytes in die XML datei die auch mit einem zeichen versehen sind. Soll heißen das er für ein Leerzeichen in der Quelldatei nichts in der XML-Datei einfügt. Ich brauche aber dieses Leerzeichen. Die Quelldatei hat folgenden Inhalt. RIFF$k WAVEfmt "V ˆX data k . Das erste Leerzeichen nach dem ersten Quadrat wird schon nicht mehr geschreieben und nach dem zweiten Quadrat kommt der Fehler Required white space was missing. Error processing <RIFF value="RIFF"/><LengthOfFile value="$k kann mir einer helfen? Danke Grüße Cos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 26. Juli 2005 Teilen Geschrieben 26. Juli 2005 Wie liest du denn die Daten aus? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 26. Juli 2005 Autor Teilen Geschrieben 26. Juli 2005 char Buffer[3]; char* pBuffer = Buffer; ifstream Header("header.dat", ios::in|ios::binary); ofstream XMLFile("header.xml", ios::out|ios::binary); // Erste und zweite Zeile schreiben XMLFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", 39); XMLFile.write("<RiffWaveHeader>\n", 17); // RIFF schreiben Header.read(pBuffer, 4); XMLFile.write("<RIFF value=\"", 13); XMLFile.write(pBuffer, 4); XMLFile.write("\"/>\n", 3); und das nachste pBuffer enthält das besagte Leerzeichen das mir aber leider nicht mehr dargestellt wird. Hast du eine Ahnung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 26. Juli 2005 Teilen Geschrieben 26. Juli 2005 Leider nicht, C++ ist nicht ganz so mein Ding. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. Juli 2005 Teilen Geschrieben 26. Juli 2005 Äh, versuchst du da etwa, Binärdaten in eine XML-Datei zu schreiben? Das wird nicht ohne Codierung, z.B. Base64, funktionieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 Hi, also ich habe mittlerweile einige Daten in die XML-Datei schreiben können. Habe den Code auch geändert, das er nun die benötigten Daten in die XML-Datei schreibt. aber jetzt macht er bei folgendem Code Probleme... char Buffer[4]; char* pBuffer = Buffer; char str[10] = {'\0'}; unsigned int outxml; int i; ifstream Header("header.dat", ios::in|ios::binary); ofstream XMLFile("header.xml", ios::out|ios::binary); // Erste und zweite Zeile schreiben XMLFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", 39); XMLFile.write("<RiffWaveHeader>\n", 17); // RIFF schreiben Header.read(pBuffer, 4); XMLFile.write("<RIFF value=\"", 13); XMLFile.write(pBuffer, 4); XMLFile.write("\"/>\n", 3); //FileSize schreiben for (i = 0; i < 10; i++) str = 0; Header.read(pBuffer,4); XMLFile.write("<LengthOfFile value=\"", 21); outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0]; outxml +=8; _itoa(outxml, str, 10); XMLFile.write(str,10); XMLFile.write("\"/>\n", 3); // WAVE schreiben Header.read(pBuffer, 4); XMLFile.write("<WAVE value=\"", 13); XMLFile.write(pBuffer, 4); XMLFile.write("\"/>\n", 3); // Format Chunk schreiben Header.read(pBuffer, 4); XMLFile.write("<FormatChunk value=\"", 21); XMLFile.write(pBuffer, 4); XMLFile.write("\"/>\n", 3); // ChunkSize schreiben for (i = 0; i < 10; i++) str = 0; Header.read(pBuffer, 4); XMLFile.write("<ChunkSize value=\"", 18); outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0]; _itoa(outxml, str, 10); XMLFile.write(str,10); XMLFile.write("\"/>\n", 3); // Format schreiben for (i = 0; i < 10; i++) str = 0; Header.read(pBuffer, 2); XMLFile.write("<Format value=\"", 16); outxml = Buffer[1] * 0x100 + Buffer[0]; _itoa(outxml, str, 10); XMLFile.write(str,10); XMLFile.write("\"/>\n", 3); //Channels schreiben for (i = 0; i < 10; i++) str = 0; Header.read(pBuffer, 2); XMLFile.write("<Channels value=\"",17); outxml = Buffer[1] * 0x100 + Buffer[0]; _itoa(outxml, str, 10); XMLFile.write(str,10); XMLFile.write("\"/>\n", 3); //HIER KOMMT DER FEHLER!!! Wenn ich diesen Teil Sample Rate weglasse dann geht die Datei, wenn nicht dann bekomme ich den Error Whitespace... //Sample Rate schreiben for (i = 0; i < 10; i++) str = 0; Header.read(pBuffer, 4); XMLFile.write("<SampleRate value=\"",20); outxml = Buffer[0]; //* 0x1000000 + Buffer[1] * 0x10000 + Buffer[2] * 0x100 + Buffer[3]; _itoa(outxml, str, 4); XMLFile.write(str,4); XMLFile.write("\"/>\n", 3); Eine Idee?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. Juli 2005 Teilen Geschrieben 27. Juli 2005 Eine Idee??Sogar zwei: - du solltest dir dringend nochmal ansehen, was der dritte Parameter von itoa bedeutet, und - du solltest beim Schreiben der in Strings umgewandelten Zahlen deren tatsächliche Länge berücksichtigen. Ich frage mich allerdings, was das mit Webdesign zu tun hat. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 oh, die letzte Zeile sollte eigentlich so aussehen. outxml = Buffer[0]; * 0x1000000 + Buffer[1] * 0x10000 + Buffer[2] * 0x100 + Buffer[3]; _itoa(outxml, str, 10); XMLFile.write(str,10); das war eben nur ein Test gewesen. Was das mit Webdesign zu tun hat weiß ich auch nicht, aber das hier ist das einzige Unterforum was sich mit XML beschäftigt...glaube ich...wenn nicht entschuldige ich mich für den falschen Post. Aber funktionieren tuts trotzdem nicht... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 und das ; hinter Buffer[0] sollte natürlich auch nicht da sein.. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. Juli 2005 Teilen Geschrieben 27. Juli 2005 XMLFile.write(str,10);Ich sagte doch, du musst die tatsächliche Länge des Strings berücksichtigen. Du schreibst 10 Zeichen in die Datei, egal wie lang str ist. Ist str kürzer, wird die Stringterminierung in die Datei geschrieben, was vermutlich kein gültiges XML ergibt. Ist str länger, schneidest du die letzten Stellen der Zahl ab. Ich verstehe sowieso nicht, wieso du in eine Textdatei binär schreibst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 was würdest du denn anders machen wenn man besser nicht binär schreiben soll? und wie? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. Juli 2005 Teilen Geschrieben 27. Juli 2005 Nicht write benutzen, sondern operator<<, wie bei cout. Dann brauchst du auch nicht immer nachzuzählen, wie lang die Strings sind Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 und das funktioniert auch mit schreiben in eine andere Datei? Das wusste ich nicht. soll dann so aussehen? _itoa(outxml, str, 10); XMLFile<<(str); XMLFile.write("\"/>\n", 3) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 aber leider hat sich nix dran geändert. es funktionert zwar aber bei der sample rate kommt der fehler wieder Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. Juli 2005 Teilen Geschrieben 27. Juli 2005 und das funktioniert auch mit schreiben in eine andere Datei?Wieso nicht? ostream ist ostream, das ist ja der Sinn der C++-Streams. //kein _itoa, kein write XMLFile << outxml<< "\"/>\n";[/code] aber leider hat sich nix dran geändert. es funktionert zwar aber bei der sample rate kommt der fehler wiederDas sind auch nur 19 Zeichen. Du schreibst 20. Wirf erst mal write komplett raus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 HAMMER!!! Bis jetzt klappt alles. ich kann das erste mal die Samplerate darstellen:-) Das macht laune auf mehr. Ich hoffe ich darf mich bei dir nochmal melden wenn ich es doch nicht schaffe... Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 Hallo, habe mal ein verständnisfrage Meine quelldatei weißt folgende Hexzahlen auf 00 0d d4 24 und wenn ich diese zahlen mit diesem code auslese outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0]; outxml +=8; erhalte ich anstatt dd424 , cd424...wieso? es steht im debugger Buffer[0] 0x24 Buffer[1] 0xd4 Buffer[2] 0x0d Buffer[3] 0x00 ??? verstehe ich nicht.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. Juli 2005 Teilen Geschrieben 27. Juli 2005 erhalte ich anstatt dd424 , cd424...wieso?Wo steht denn der falsche Wert? Auch im Debugger? Stimmt der dezimale Wert in der Datei? Warum += 8? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 also die Zahlen stimmen im debugger so lange bis er die zeile outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0]; abgearbeitet hat. Sie stehen dann richtig in den Buffers drin aber im outxml steht dann das falsche... die +=8 gehören zur Deklaration des Headers laut Standard. das gleiche problem habe ich dann auch paar zeilen tiefer bei... XMLFile<<("<SampleRate value=\""); outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0]; XMLFile << outxml<< "_Hz\"/>\n"; Dort sollte raus kommen 80 bb aber er macht draus ff ff 80 bb obwohl ich vorher outxml auf null setze. Laut Buffer stehen in Buffer[3] und Buffer[2] hex00 drin. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 sorry fehler...es kommt nicht ff ff 80 bb raus sondern ff ff ba 80...wo kommt das a her anstatt dem b was eigentlich bei bb sein soll Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. Juli 2005 Teilen Geschrieben 27. Juli 2005 Stimmt der dezimale Wert in der Datei? Zeig doch noch mal den ganzen Code, bitte mit Code-Tags. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 27. Juli 2005 Autor Teilen Geschrieben 27. Juli 2005 char Buffer[4]; char* pBuffer = Buffer; unsigned int outxml; ifstream Header("eingabe.wav", ios::in|ios::binary); ofstream XMLFile("header.xml"); // Erste und zweite Zeile schreiben XMLFile<<"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; XMLFile<<"<RiffWaveHeader>\n"; // RIFF schreiben Header.read(pBuffer, 4); XMLFile.write("<RIFF value=\"", 13); XMLFile.write(pBuffer, 4); XMLFile.write( "\"/>\n",3); // Filesize schreiben outxml = 0; Header.read(pBuffer,4); XMLFile<<("<LengthOfFile value=\""); outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0]; outxml +=8; XMLFile << outxml<< "_byte\"/>\n"; // WAVE schreiben Header.read(pBuffer, 4); XMLFile.write("<WAVE value=\"", 13); XMLFile.write(pBuffer, 4); XMLFile.write("\"/>\n", 3); // Format Chunk schreiben Header.read(pBuffer, 4); XMLFile.write("<FormatChunk value=\"", 21); XMLFile.write(pBuffer, 4); XMLFile.write("\"/>\n", 3); // ChunkSize schreiben Header.read(pBuffer, 4); XMLFile<<("<ChunkSize value=\""); outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0]; XMLFile << outxml<< "_byte\"/>\n"; // Format schreiben Header.read(pBuffer, 2); XMLFile<<("<Format value=\""); outxml = Buffer[1] * 0x100 + Buffer[0]; XMLFile << outxml<< " [1=PCM]\"/>\n"; //Channels schreiben Header.read(pBuffer, 2); XMLFile<<("<Channels value=\""); outxml = Buffer[1] * 0x100 + Buffer[0]; XMLFile << outxml<< "_Ch\"/>\n"; //Sample Rate schreiben outxml =0; Header.read(pBuffer, 4); XMLFile<<("<SampleRate value=\""); outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0]; XMLFile << outxml<< "_Hz\"/>\n"; //Bytes per second schreiben Header.read(pBuffer, 4); XMLFile<<("<BytesSecond value=\""); outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0]; XMLFile << outxml<< "_bytes/second\"/>\n"; //Block Align schreiben Header.read(pBuffer, 2); XMLFile<<("<BlockAlign value=\""); outxml = Buffer[1] * 0x100 + Buffer[0]; XMLFile << outxml<< "\"/>\n"; //Bits per Sample schreiben Header.read(pBuffer, 2); XMLFile<<("<Bits-per-Sample value=\""); outxml = Buffer[1] * 0x100 + Buffer[0]; XMLFile << outxml<< "_bit\"/>\n"; //Data Chunk schreiben Header.read(pBuffer, 4); XMLFile.write("<DATA value=\"", 13); XMLFile.write(pBuffer, 4); XMLFile.write( "\"/>\n",3); //Laenge des Data Chunk Header.read(pBuffer, 4); XMLFile<<("<DataLength value=\""); outxml = Buffer[3] * 0x1000000 + Buffer[2] * 0x10000 + Buffer[1] * 0x100 + Buffer[0]; XMLFile << outxml<< "_bytes\"/>\n"; // XML-File abschließen XMLFile<<("</RiffWaveHeader>\n"); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. Juli 2005 Teilen Geschrieben 27. Juli 2005 [B]unsigned [/B]char Buffer[4]; char* pBuffer = [B](char*)[/B]Buffer; [/code]Sonst kommt es zu unerwünschten Effekten, wenn man einen char > 127 zu einem unsigned int addiert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cos Geschrieben 28. Juli 2005 Autor Teilen Geschrieben 28. Juli 2005 Hi, perfekt es funtioniert einwandfrei. Vielen Dank für deine Mühen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.