zahlen aneinander reihen



  • Also mein problem ist folgendes
    nach einer eingabe habe ich 4 Bytes mit jeweils einer zahl
    Das ganze sieht so im speicher aus(mit der zahl 9999):

    Binär:

    |0000 1001|0000 1001|0000 1001|0000 1001|
    

    Hexadezimal:

    |09|09|09|09|
    

    Dezimal:

    |009|009|009|009|
    

    Wie mus ich jetzt vorgehen wen ich die jetzt zusamen schieben will zur 9999
    also so das im speicher das hier steht:

    Binär:

    |0000 0000|0000 0000|0010 0111|0000 1111|
    

    Hexadezimal:

    |00|00|27|0F|
    

    Dezimal:

    |000|000|39|255|
    


  • Interpretiere je zwei Bytes als unsigned short. Addiere dann die shorts unter Berücksichtigung der Wertigkeit. Also ungefähr so:

    for i = 0 to 3
      s[3 - i] = *reinterpret_cast<unsigned short*>(bytearray[2 * i]);
    
    sum = 0
    for i = 0 to 3
      sum += 10**i * s[i]
    

    Edit: signed -> unsigned.



  • also soll ich wen ich das richtig interpretiere 2 bytes zu einen short zusmane fassen und die beiden dann addieren ? also so:

    09 09 + 09 09 = 12 12

    aber dann kommt doch nicht mein gewünschter wert raus oder habe ich was missverstanden ?

    erwähnen sollte ich vieleicht noch das ich das versuche mit Assembler zu realissieren im MASM

    ich habe gedacht das könnte man mit einer einfachen formel löse 😛 deswegen habe ich hier den thread aufgemacht

    edit: ich habe mal im Assembler forum gepostet das hier kann geclosed oder gelöscht werden



  • Hallo TomHalo,

    ich glaube, Michael hat sich da vertan. In jedem Byte steht doch bereits eine 9 - also muss man die nur zusammenrechnen.

    #include <iostream>
    
    int main()
    {
        using namespace std;
        char speicher[] = { 0x09, 0x09, 0x09, 0x09 };
        int wert = 0;
        for( char* p = speicher; p != speicher + sizeof(speicher); ++p )
        {
            wert *= 10;
            wert += int(*p);
        }
        cout << hex << wert << endl;
        return 0;
    }
    

    Ausgabe: "270f"

    Gruß
    Werner



  • Ach, das ist nur ein Byte pro Ziffer. Hatte mich schon gewundert, warum jede Ziffer in zwei Bytes gespeichert sein soll 😉


Anmelden zum Antworten