Cos Geschrieben 25. Juli 2005 Geschrieben 25. Juli 2005 Hallo zusammen, ich möchte gerne eine Datei namens Header.dat in der 44 Bytes enthalten sind in eine andere Datei schreiben. Diese Datei soll die 44 Bytes jedoch als pure Hexadezimalzahlen enthalten oder als Dezimal, das ist egal. Kann mir jemand helfen? Danke Grüße Cos Zitieren
Goos Geschrieben 25. Juli 2005 Geschrieben 25. Juli 2005 Kann mir jemand helfen? Ja, die eingebaute Suchfunktion. Das Thema wurde schon oft behandelt Goos Zitieren
Klotzkopp Geschrieben 25. Juli 2005 Geschrieben 25. Juli 2005 Diese Datei soll die 44 Bytes jedoch als pure Hexadezimalzahlen enthalten oder als Dezimal, das ist egal.Wieviele Bytes pro Zahl? Big oder Little Endian? Zitieren
Cos Geschrieben 26. Juli 2005 Autor Geschrieben 26. Juli 2005 1 Byte pro Zahl. Big und Little Endian variieren in dem Header, mal so und mal so. Kurz gesagt, ich möchte die Datei so in einer Textdatei stehen haben so wie sie auf der linken( bei den meisten Editoren) Seite, also Hexzahlen dargestellt werden. Cos Zitieren
Klotzkopp Geschrieben 26. Juli 2005 Geschrieben 26. Juli 2005 1 Byte pro Zahl. Big und Little Endian variieren in dem Header, mal so und mal so.Wenn du jedes Byte einzeln in eine Hexzahl umwandeln willst, ist die Endianness ja egal Kurz gesagt, ich möchte die Datei so in einer Textdatei stehen haben so wie sie auf der linken( bei den meisten Editoren) Seite, also Hexzahlen dargestellt werden.Ok, die Aufgabe ist klar. Wo ist das Problem? Einlesen? Umwandeln? Schreiben? Zitieren
Cos Geschrieben 26. Juli 2005 Autor Geschrieben 26. Juli 2005 Das Problem ist das ich in meiner Datei leider nur Ascii-Zeichen habe und keine Hex-Werte. Ich möchte die Ascii-Zeichen, zu je 4 Bytes oder 2 bytes in eine XML-Datei schreiben. aber ich bekomme sie einfach nicht umgewandelt. zb: "V (sind 2 Leerzeichen hinten dran) = Hexadezimal 22 56 00 00 = Int 22050 "kHz". Verstehst du was ich meine...wie wandle ich das? Und warum macht mein XML-File bei einem Leerzeichen schlapp und lässt das wegfallen. Grüße Jens Zitieren
Goos Geschrieben 26. Juli 2005 Geschrieben 26. Juli 2005 Wie genau wandelst du das von der Theorie her? Wie kommt man von V(mit zwei Leerzeichen) auf Hexadezimal 22 56 00 00 und davon dann auf Int 22050 ? Was fasst du da wie zusammen? Versuchs bitte mal zu erklaeren Goos Zitieren
Cos Geschrieben 26. Juli 2005 Autor Geschrieben 26. Juli 2005 Also es sieht folgendermaßen aus. V (ascii) = 56 " (ascii) = 22, [das hattest du üebrsehen] Leerzeichen nicht DAS Leerzeichen, sondern das was bei h00 kommt wenn man es im editor anschaut. Daraus folgt 22 56 00 00 gelesen little endian, ergbit 22050. Zitieren
Klotzkopp Geschrieben 26. Juli 2005 Geschrieben 26. Juli 2005 Eine Möglichkeit: #include <iostream> using namespace std; int main() { unsigned char byte = 'V'; char hexdigits[] = "0123456789abcdef"; char hex[3] = {0}; hex[0] = hexdigits[byte / 16]; hex[1] = hexdigits[byte % 16]; cout << hex << '\n'; }[/code] Zitieren
Cos Geschrieben 26. Juli 2005 Autor Geschrieben 26. Juli 2005 Aber mit deinem Code habe ich ja statische angaben zu den Chars. Ich habe aber ein Array in dem die Daten stehen. Also muss ich was dynamisches haben. Zitieren
Goos Geschrieben 26. Juli 2005 Geschrieben 26. Juli 2005 Ich denk mal, du willst das in etwa so machen und str dann wieder wegschreiben: char byte[4]; byte[0] = '\"'; byte[1] = 'V'; byte[2] = 0; byte[3] = 0; char str[10] = {'\0'}; int a = byte[3] * 0x1000000 + byte[2] * 0x10000 + byte[1] * 0x100 + byte[0]; _itoa(a, str, 10); cout << str << endl;[/PHP] Goos Zitieren
Klotzkopp Geschrieben 26. Juli 2005 Geschrieben 26. Juli 2005 Aber mit deinem Code habe ich ja statische angaben zu den Chars. Ich habe aber ein Array in dem die Daten stehen. Also muss ich was dynamisches haben.In meinem Code wird nur ein einziger char umgewandelt. Es sollte nicht besonders schwierig sein, das in eine Schleife zu verpacken. Das Array hexdigits wird nicht umgewandelt, es dient nur als Lookup-Tabelle für die Zeichen. Zitieren
Cos Geschrieben 27. Juli 2005 Autor Geschrieben 27. Juli 2005 hi ihr beiden seid meine helden...es klappt mit einer kleinen schleife die den Buffer jedesmal nullt und umbenennen des a in uint hats geklappt. Aber wenn ich noch einmal was fragen darf. Woher kommt der fehler Required white space was missing. Error processing resource 'file:///C:/Dokumente und Einstellungen/.../header.xml'. Line 3, Position 242 <RIFF value="RIFF"/><LengthOfFile value="486188 in der xml-datei? Der fehler kommt erst nach ein paar Daten die ich reingeschrieben habe. Seltsamerweise liest mir C++ die Daten richtig aus, nur die XML-Datei schreibst nicht... Mein XML-Header ist: XMLFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", 39); XMLFile.write("<RiffWaveHeader>\n", 17); Viele Grüße Cos Zitieren
Cos Geschrieben 28. Juli 2005 Autor Geschrieben 28. Juli 2005 Hi, ich bin auf der Suche nach einem Befehl der eine Datei aus liest bis der string "data" erreicht ist und gleichzeitig einen Counter hochzählt. welchen Befehl gibt es da? Habe mit fread und gets probiert, aber es klappt nicht. Zitieren
Goos Geschrieben 28. Juli 2005 Geschrieben 28. Juli 2005 Natuerlich geht das mit fread. Du musst natuerlich selbst ueberpruefen, wann du bei deinem Wunschstring angelangt bist, das nimmt dir keiner ab Goos Zitieren
Cos Geschrieben 28. Juli 2005 Autor Geschrieben 28. Juli 2005 Und genau das ist mein Gedächntnislücke...eine von vielen...:-) mit was checke ich das dann? Weil es sind ja vier Bytes die das Wort darstellen und es kann ja sein das nicht unbedingt das erste "d" was erscheint schon das von data ist. Muss ich dann vier tests machen. Quasi, wenn "d" dann checke ob nächstes byte "a"...etc. Zitieren
Cos Geschrieben 2. August 2005 Autor Geschrieben 2. August 2005 Hallo jetzt funktioniert bei mir alles wunderbar in eine Richtung. Nun muss ich aber mal kurz fragen wie es in die andere geht. mein xml file sieht so aus. <?xml version="1.0" encoding="UTF-8" ?> - <RiffWaveHeader> <RIFF value="RIFF" /> <LengthOfFile value="6144036_byte" /> <WAVE value="WAVE" /> und nun möchte ich die Daten die in den Hochkommata ab RIFF Value stehen wieder in ASCII in eine Datei habe. quasi das was ich vorher gemacht habe rückgängig. Und wenn es geht ohne diese XML-Klassen mit Get.Attrib.Val() etc. Geht das? Grüße Cos Zitieren
Goos Geschrieben 2. August 2005 Geschrieben 2. August 2005 Natuerlich kannst das ohne deine XML Klassen machen und dein File von Hand parsen, ich bezweifle jedoch, dass es dadurch einfacher wird (Es sei denn du hast deine dezimalen Werte noch in irgendner Struktur gespeichert) Ansonsten einfach rueckwaerts rechnen Goos Zitieren
Cos Geschrieben 2. August 2005 Autor Geschrieben 2. August 2005 Ja das mit dem Rückwärtsrechnen ist so ne Sache. Mich interessiert ja nur die Zahl die in den Hochkommata steht. Wie bekomme ich die denn einzeln da raus? so das ich überhaupt rechnen kann. momentan kopiere ich alles inklusive dem RIFF value und dem XML header in die Datei. Zitieren
Goos Geschrieben 2. August 2005 Geschrieben 2. August 2005 Na ueber deine XML Klassen wirst doch wohl deinen Wert...aehm was hatten wir doch gleich?.... 22050 wieder raus, oder? Diese 22050 kannst dann einfach auch wieder zurueckrechnen Goos Zitieren
Cos Geschrieben 8. August 2005 Autor Geschrieben 8. August 2005 Hi, will jetzt nicht extra einen neuen thread öffnen. was ist an der schleife hier falsch? unsigned char str[1000]; for (;str[a] != '<' && str[a+1] != '/' && str[a+2] != 'R'; a++) Wieso bricht die schleife ab, sobald str[a] !='v' erfüllt ist aber die anderen nicht? Grüße Cos Zitieren
Goos Geschrieben 8. August 2005 Geschrieben 8. August 2005 Du hast in deinem Code kein str[a] !='v' stehen ...und abbrechen tuts schon beim ersten erfuellten, weil du die Bedingungen per UND verknuepft hast. Sobald eine Bedingung falsch ist, wird der Ausdruck,welcher ueber UND verknuepft ist, falsch und die Schleife bricht ab. Goos Zitieren
Cos Geschrieben 8. August 2005 Autor Geschrieben 8. August 2005 :-) Du machst dich immer lusitg über meine schwerwiegenden Probleme.. Aber hast recht die schleife musste mit oder verknüpft werden weil das und und das ungleich sich nicht miteinander vertragen. Jetzt gehts Zitieren
Cos Geschrieben 8. August 2005 Autor Geschrieben 8. August 2005 nun geht die schleife und ich bin froh, aber ich habe noch folgendes problem //File Length auslesen if (j == 0x41c && value == 0x21d) { for (unsigned int iii = 0; iii < a-(b+bb); iii++) c = fgetc(file); bb = 0; for( ;c != '_' { b = a; fprintf(head, "%c", c); c = fgetc(file); bb++; } } [/code] Diese schleife gibt mir eine Zahl aus, die in dem unsigned char c gespeichert und dann in die Datei head geschrieben wird. c ist ein char da auch Buchstaben ausgegeben werden. Jetzt möchte ich die Zahl in Ascii haben und habe es mit _itoa probiert aber das wollte er nicht. Wie müsste das denn aussehen? _itoa(out,c,??) was denn für ein radix? Zitieren
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.