Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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?

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

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

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.

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.

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

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.

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

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.

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.

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

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

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.

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

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

Du hast in deinem Code kein str[a] !='v' stehen :D

...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

:-) 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 :D

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?

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.