Unsigned LowByte und HighByte nach int



  • Hallo!
    Ich brauche eine Funktion, die mir aus einem unsigned LowByte und HighByte
    ein int macht. Die beiden Bytes sind codiert im 2er Komplement.
    Folgendes brachte nicht das gewünschte Ergebnis:

    int LowHighToSigned(unsigned _LowByte, unsigned _HighByte)
    {
        unsigned Decimal;
        Decimal = (_HighByte << 8) | _LowByte;
    
        return (~Decimal) + 1;
    }
    


  • Na dann antworte ich mal selber. So hat's funktioniert:

    int LowHighToSigned(unsigned _LowByte, unsigned _HighByte)
    {
        int16_t Decimal;
        Decimal = (_HighByte << 8) | _LowByte;
    
        //if negative (leading 1)
        if (Decimal & 32768 == 32768)
        {
            Decimal = -((~Decimal) + 1);
        }
    
        return Decimal;
    }
    

    Ob das die beste Lösung ist, weiss ich nicht, aber es geht.


Log in to reply