Binärdarstellung - Anordnung der Bytes in einem Datentyp



  • Hi,

    ich wollte gerade eine Funktion schreiben die mir für jeden Datentyp die Binärdarstellung in einem String zurückgibt, hier mal schnell der Code:

    #include <string>
    
    using namespace std;
    
    template<class X> string binary_cast(X value)
    {
        string res("");
        unsigned char bm, *pX = reinterpret_cast<unsigned char *>(&value);
        short size = sizeof(X);
        for(int i = 0; i < size; i++)
        {
            bm = 128;
            for(int j = 0; j < 8; j++)
            {
                if(pX[i] & bm) res += "1";
                else res += "0";
                bm = bm >> 1;
            }
            res += " ";
        }
        return res;
    }
    

    Welches beim Aufruf mit dem Wert 123 folgenden Wert ausgibt:
    01111011 00000000 00000000 00000000

    Hier sind alle Bit-Blöcke in falscher Reihenfolge, d. h. das die einzelnen Bytes eines Datentyps so auch im Speicher abgelegt werden.

    Aber wieso werden die Bytes in umgekehrter Reihenfolge gespeichert, dies macht für mich nicht so wirklich sinn?!?

    Was jedoch für meine Funktion wichtiger ist, ist die Frage ob dies immer so ist und auch auf jedem Betriebssystem???

    Gruß Wolle.


  • Mod

    das ist bei allen x86 compatiblen prozessoren so - die sog. little endian darstellung. die meisten anderen prozessoren (z.b. beim Mac) benutzen big endian, also das byte mit der höchsten signifikanz zuerst. das ist letztlich historisch bedingt. (der vorteil von little endian ist, dass der wert eines bytes nur von seiner stelle im datentyp abhängig ist, nicht aber von der gesamtgrösse des typs).
    diese unterschiede sind beim datenaustausch zu berücksichtigen. netzwerk protokolle z.b., die auf allen plattformen genutzt werden, sind normalerweise big endian codiert.



  • Ah ok, vielen dank!!!


Anmelden zum Antworten