1 Byte in long



  • Hallo Leute,

    auch wenn das Thema schon leidig oft im Netz besprochen wurde. Ich habe das Problem noch immer und
    ich hoffe ihr könnt mir bei helfen:

    ich möchte von einer Binärdatei Byteweise Hexzahlen lesen und dezimal ausgeben. Als Variable zum einlesen habe ich BYTE und char ausprobiert, teilweise auch dort mit Erfolg, wo die Dezimalzahlen auch nur ein Byte lang sein müssen. Will ich die Bytes in eine Longvariable reinstecken (char oder BYTE einlesen und konvertieren mit strtol, atol, memcpy usw.)meckert z.T der compiler nicht rum, aber beim Testen erscheint, wenn die Datentypen dann konvertiert werden sollen, eine Fehlermeldung in strtol.c zeile 94

    Was mache ich falsch? habt ihr Lösungen zum Problem?
    MFC-Projekt, VS 2008

    unsigned int könnte ich auch an stelle von long nehmen ist aber schwieriger zu handeln, oder?

    char str1, str2;
    ...
    CFile datei( m_pathname, CFile::modeRead); 
    
    datei.Read( &str1, sizeof(str1) ); 
    m_strEdit1 = int( str1 );	//m_strEdit1 ist int, Ausgabe funktioniert
    
    datei.Read(&str2, sizeof(str2));
    nextadr = atol(reinterpret_cast<const char*>(str2)); //Funktioniert nicht!
    m_nextadr = nextadr ;		//beides long
    

    Micha



  • str2 bezieht sich auf den Wert des Chars.
    &str2 ist seine Adresse.

    Und ein char ist ein einzelner Buchstabe und keine nullterminierte Zeichenkette.
    Sieh dir noch mal genau an, wie das mit den C Strings ist und was für einen Parameter atol erwartet.



  • char c  = 'x';       //einzelnes Zeichen (Character)
    char *s = "Hallo!";  //Array von chars (also ein String)
                         //s[0]=='H'
                         //s[1]=='a'
                         //s[2]=='l'
                         //s[3]=='l'
                         //s[4]=='o'
                         //s[5]=='!'
    char c  = 'Hallo!';  //gibt es nicht!
    

Log in to reply