Division von Arrays binär



  • Hallo zusammen

    Ich bin auf der such nach einer Methode wie man einen unsigned char array, 6 Byte (Ganzzahl) ,durch 1000 dividieren kann.
    Habe keinen 8 Byte Datentyp zur Verfügung.
    Durch die Divison durch 1000 passt der Wert wieder in einen Integer.

    Gruss



  • 1024 geht nicht?



  • Das wäre die einfachste Variante.
    Aber es sollte genau gerechnet werden, da ich den Wert mit localtime auflösen muss. Daher ist 1024 keine Option.



  • Du machst es wie bei der schriftlichen Division, die du in der Grundschule gelernt hast, außer dass du statt Dezimalziffern Bytes nimmst:

    #include <stdio.h>
    
    #ifdef _WIN32
        #ifdef __CYGWIN__
            #define FMT64 "%llu"
        #else
            #define FMT64 "%I64u"
        #endif
    #else
        #define FMT64 "%llu"
    #endif
    
    unsigned char arr[] = {0x12,0x34,0x56,0x78,0x89,0x01,0,0};
    
    int main ( void )
    {
        unsigned divisor = 1000;
        unsigned quotient = 0;
        unsigned rest = 0;
    
        for (int i=5; i>=0; --i)
        {
            unsigned char* ziffer = &arr[i];
            unsigned dividend = (rest << 8) | *ziffer;
            unsigned q = dividend / divisor;
            quotient = (quotient << 8) | q;
            rest = dividend % divisor;
        }
    
        long long * ll = (long long *) arr;
        printf (FMT64 " / %u = %u  Rest=%u\n",*ll, divisor,quotient,rest);
    
        return 0;
    }
    

    viele grüße
    ralph



  • Besten Dank
    funktioniert wunderbar 👍


Log in to reply