byte weisse auslesen eines x beliebigen Datentypes



  • hallo erstmal

    meine primäre frage ist. wie man aus einem datentyp. zb int, unsignet short, WORD usw. eine bestimmte byte stelle ausliest.

    mein erster gedanke war alles in ein byte zu konvertieren. aber vielleicht kennt ja jemand eine andere lösung.

    /*kommt von dem problem ein unsignet short dessen hexwert meine CRC summe in verkehrter reihenvolge ist. diese 2 hexwerte möcht ich nun umkehren^^*/

    vielleicht kann mir jemand helfen oder nen lösungsansatz posten.

    grets stony



  • Konvertiere es in ein ByteArray.

    byte b = ((byte*)&l)[x];
    


  • Hi Stony,

    wenn Du bei einem beliebigen Datentyp die Byte-Folge vertauschen willst, so geht das z.B. so:

    #include <iostream>
    #include <algorithm>    // reverse
    template< typename T >
    T flip( T x )
    {
        std::reverse( reinterpret_cast< char* >( &x ),
            reinterpret_cast< char* >( &x ) + sizeof( T ) );
        return x;
    }
    int main()
    {
        using namespace std;
        unsigned short s = 0x3412;
        cout << "0x" << hex << flip( s ) << endl;
        return 0;
    }
    

    Der Zugriff auf ein Byte an der Stelle 'i' - z.B. von 's' ist entsprechend
    reinterpret_cast< char* >( &s )[i];

    Gruß
    Werner



  • wie schön das es nich union´s gibt.


Anmelden zum Antworten