Long und Char



  • 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,
    bacco


  • Mod

    Schau Dir mal strtol und strtoul an!



  • Habe gerade nach ein paar Versuchen festgestellt, dass ich mich ein wenig ungeschickt ausgedrückt habe, bzw. das Problem ein wenig anders ist.

    Ich lese diese Struktur aus, die mir als Zahlenkette die 1179011410 zurück liefert.
    Und nun möchte ich diese Zahl mit der Zeichenkette RIFF vergleichen.

    Wie kann ich das machen? Wie kann ich den Wert 1179011410 umwandeln (gibt es dafür nicht nen Algorithmus?) und dafür das Wort RIFF erhalten? Genaus muss ja für das Wort fmt die Zahl/Bytefolge 544501094 herauskommen....



  • Achso. Da heißt das Zauberwort "reinterpret_cast".

    Edit: Aber wenn es dir nur darum geht, die Kennwerte im Wave-Header wiederzufinden, kannst du auch auf Long-Ebene vergleichen (ist vermutlich einfacher als memcmp()).



  • Vergleich den Wert doch einfach mit 'FFIR', ne?

    DWORD signatur = ...;
        bool isseGut = (signatur == 'FFIR');
    

    Alternativ kannst du auch auf char Basis arbeiten, und p[0] == 'R' && p[1] == 'I' etc. machen.
    Oder du machst aus den 4 chars der Signatur nen String (std::string) und vergleichst dann einfach wie man eben Strings vergleicht.


Log in to reply