Hexzahlen auswerten



  • Hi,

    hat einer von euch ne idee wie ich aus ner 8 stelligen hex zahl 4 zweistellige mache?

    beispiel:

    aus 0x12345678 soll werden 0x12 0x34 0x56 0x78

    die 8 stellige zahl liegt mir als int vor und ich brauch die anderen als unsiged char in nem feld.

    ich hab da momentan eine nicht so schöne berechnung für

    SendMsg.DATA[3]=wert/0x1000000;
    	wert=wert-(SendMsg.DATA[7]*0x1000000);
    
    	SendMsg.DATA[2]=wert/0x10000;
    	wert=wert-(SendMsg.DATA[6]*0x10000);
    
              usw...
    

    geht das auch schöner??

    Danke schonmal



  • Hallo

    Dafür kannst du cast benutzen.

    int wert = ...;
    unsigned char* bytes = reinterpret_cast<unsigned char*>(&wert);
    for (int lv = 0; lv < sizeof(int); lv++)
      ... bytes[lv];
    

    bis bald
    akari



  • Danke,
    das hat funktioniert.

    geht das aus adersherum? Ich müsste aus 4 1byte hex Zahlen eine (4byte)float zahl machen. Die Hex zahlen sind im unsigned char feld.

    ich versteh noch nicht so ganz was die funktion macht. aus der hilfe von bds werd ich auch nicht schlau draus. vielleicht könntest du mir mit deinen worten das mal erklären.

    soweit wie ich das verstanden habe, müsste das doch in etwa so aussehen:

    unsigned char DATA[4];
    	DATA[0]=0x12;
    	DATA[1]=0x34;
    	DATA[2]=0x56;
    	DATA[3]=0x78;
    
    	float* bytes = reinterpret_cast<float*>(DATA[0]);
    

    aber ab da komm ich irgendwie nicht weiter

    float besteht doch aus 4 bytes, oder? also müsste ich doch eigentlich nur den zeiger auf den anfang vom char feld legen und dem beibringen das es ein float wert ist den er ab da lesen soll, oder seh ich das flasch?

    Danke schonmal



  • weiß keiner wie ds geht?? 😞 😞 😕



  • Müsste doch fast so gehen. Allerdings solltest du keinen Pointer auf float nehmen. Dann brauchst du nur noch zu dereferenzieren und fertig.

    float bytes = *reinterpret_cast<float*>(DATA[0]);
    


  • Danke,
    aber hab eine andere möglichkeit gefunden.Ich hab das jetzt mit memcpy gemacht.

    also quasi

    float wert;
    
    char DATA[4];
    
    DATA[0]=0x12;
    ...
    
    memcpy(&wert,DATA,4);
    

    so funktioniert das jetzt auf jeden fall.



  • Gib dir mal bitte die Größe eines float auf deinem Rechner aus.

    int size = sizeof(float);
    


  • 4 Bytes!

    aber das sollte bei dir doch genau so sein. soviel ich wweiß sind die float und double größen doch genormt!



  • Hallo

    Ja das entspricht der Größe auf einer 32-bit Plattform.
    Nein die größe selber ist nicht genormt, nur das Verhältnis

    sizeof(char)<sizeof(int) 
    sizeof(float)<sizeof(double)
    

    bis bald
    akari



  • Um genau zu sein:

    sizeof( char ) <= sizeof( short ) <= sizeof( int ) <= sizeof( long )

    MfG,
    Doc



  • Ich hatte mich da irgendwo vertan und eine 8 gelesen. Deswegen die Frage.


Anmelden zum Antworten