Binär



  • Hi Leute,
    also ich hab folgendes Problem:
    Ich lese eine Datei Binär ein:

    CFile test;
    test.Open("c:\\bla.txt",CFile::modeRead | CFile::modeBinary);
    test.Read(..);
    

    So nun möchte ich aber, das ich das eingelesene wirklich als 1sen und 0len erhalte.. Wie mach ich das??
    Ich komme dort einfach nicht weiter.

    Vielen Dank für eure Hilfe



  • Kennst Du den Unterschied zwischen Bits und Bytes?



  • 4 Bit = Hexadezimalsystem
    5 Bit = Telexsystem
    7 Bit = Zeichendarstellung (ASCII)
    8 Bit = 1 Byte

    meinste das?



  • Ja, so ungefähr, allerdings scheint Dir die Bedeutung von '8 Bit = 1 Byte' nicht klar zu sein.

    Du liest mit Read(...) eine Kette von Bytes ein. Somit folgt aus obiger Definition, dass eine Kette von Bytes GLEICHZEITIG auch eine Menge von Bits ist, womit sich Deine Frage nach den Nullen und Einsen erübrigt.



  • Ja schon,
    aber wie sieht das jetzt Programmiertechnisch aus???
    Wie kann ich mir denn jetzt die 0len und 1sen anzeigen lassen???
    Das kapier ich ja nicht!

    thx for helping



  • #define IS_BIT(val, bit) ((val) & (1 << (bit)))
    


  • erklärst du mir das bitte mal??



  • ich nicht 🙂



  • IS_BIT prüft, ob das entsprechende bit gesetzt ist:

    char x = 5; //00000101
    
    IS_BIT(x,2) == TRUE !!
    

    aber wieso?

    ganz einfach ... man nehme eine 1 (00000001) und verschiebe sie bitweise nach links um die anzahl der stellen, dessen bitwert man wissen möchte. (z.b. 2tes bit = 1<<2 = 4 = 000000100. Dann nur noch ein bitweises UND. Wenn das entsprechende bit gesetzt war, wird der ausdruck != 0, also TRUE sein ... Wenn nicht, ist der ausdruck 0 = FALSE.

    grüsse.



  • kleines beispiel:

    char buf[9];
    
    BYTE x = 245;
    
    for(int i=0; i<8; i++)
    {
        if( IS_BIT(x,i) )
            buf[7-i] = '1';
        else
            buf[7-i] = '0';
    }
    buf[8] = 0;
    
    MessageBox(buf);
    

    grüsse

    [ Dieser Beitrag wurde am 31.03.2003 um 14:57 Uhr von soUrcerer editiert. ]



  • Tausend Danke, das sieht schonmal sehr gut aus... 🙂


Log in to reply