Long und char (string) vergleichen

Hey,
ich bin dabei eine Struktur einer Wave-File auszulesen.

Mein Problem ist, dass ich einen Longwert mit einem String vergleichen will.
Was unter delphi ganz einfach zu klappen scheint longwert string (vereinfacht dargestellt), geht so nicht unter c++.

Wie kann ich die Werte vergleichen? Habe in meinem Bsp. als Long 1179011410 und möchte das mit der Zeichenkette RIFF vergleichen (sollte gleich sein).

Mit dem Typcast atoi, atol habe ich es schon versucht. Allerdings kommt dann jeweils 0 als Ergebnis (egal welches Wort eingegeben wird).

In der Hoffnung, dass diese Fehlermeldung vllt noch weiter hilft:
No conversion from ‚const char *‘ to ‚long‘.

Bin ziemlich ratlos und würde mich über jede Hilfe freuen,

Hallo Bacco,

Wie kann ich die Werte vergleichen? Habe in meinem Bsp. als
Long 1179011410 und möchte das mit der Zeichenkette RIFF
vergleichen (sollte gleich sein).

die *.wav folgt dem „Little-Endian-Standard“, d.h., das Low-Byte eines long’s wird zuerst in die Datei geschrieben und auch zuerst gelesen.
Daraus folgt, daß Du ‚R‘ mit dem nullten Byte des long’s vergleichen mußt, ‚I‘ mit dem ersten, usw.

Mit dem Typcast atoi, atol habe ich es schon versucht.
Allerdings kommt dann jeweils 0 als Ergebnis (egal welches
Wort eingegeben wird).

„atoi“ ist noch klein, der kann nur char* wie „1234“. Bei solchen wie
" 1234", oder „1234a“
kriegt der gleich einmal Zahnschmerzen. Mach Dir eine eigene Funktion, welche die chars einzeln vergleicht, also…

No conversion from ‚const char *‘ to ‚long‘.

&long auf char* casten, das nimmt er (Gruß an Semjon, :wink:).

Bin ziemlich ratlos und würde mich über jede Hilfe freuen,

Der Petzold, 5. Auflage, hat eine ordentliche Tabelle mit dem Wav-Header drin. Auch im Buch
„Dateiformate - die Referenz“ von Günther Born findest Du alles nötige.

Ich habe meinen wav-header jetzt nicht zur Hand, aber ich schicke Dir demnaechst ein Beispiel auf die Email (wer sonst noch eines will, mir schreiben).

lg
Martin B

Hallo ,

Mein Problem ist, dass ich einen Longwert mit einem String
vergleichen will.
Was unter delphi ganz einfach zu klappen scheint longwert
string (vereinfacht dargestellt), geht so nicht unter
c++.

Wie kann ich die Werte vergleichen? Habe in meinem Bsp. als
Long 1179011410 und möchte das mit der Zeichenkette RIFF
vergleichen (sollte gleich sein).

Peter hats ja schon angedeutet, der Compiler muss
explizit mitgeteilt kriegen, was Du machen
willst, z-B. durch ‚type cast‘. Hier mal
was dazu zum spielen:

#include 
#include 
#include 

 int main(int argc, char \*argv)
{
 unsigned long m0 = 0, // die int '0' auf dem Stack ist 
 magicnumber = 1179011410; // das \0 der 4 bytes!

 char \*text = "RIFF";

 // type casts:
 printf("Zahl als Zahl: \t %lu \n", magicnumber);
 printf("Zahl als string:\t %s \n\n", &magicnumber); // (char \*) &magicnumber
 printf("\n");
 printf("String als String:\t %s \n", text);
 printf("String als Zahl: \t %lu \n\n", \* (unsigned long\*) text);

 // als stringvergleich:
 if( strncmp(text, (char\*)&magicnumber, 4) == 0 ) {
 printf("kein ");
 }
 printf("Unterschied zwischen %s und %lu\n", text, magicnumber);

 // einzeln:
 unsigned long n0 = 0, 
 othernumber = 0; 

 printf("\nAndere vorher: \t %lu \n", othernumber);
 
 for(size\_t zeichen=0; zeichen

Grüße

CMБ

Peter hats ja schon angedeutet, der Compiler…

ich heiße zwar nicht Peter, aber macht nix, :wink:.
Martin B

danke für eure hilfe,

mfg,
bacco