Integer in BCD wandeln



  • Ich versuche verzweifelt eine Methode zu schreiben eine dreistellige Zahl (bis 999) als BCD zurückzugeben. Ich hab schon alles mögliche versucht mit Strings oder pow aber ohne Erfolg.

    unsigned int TBCDCounter::Get_zaehlerstand(void)
    {
     unsigned int zaehlstand = GetCounter();
     // ???
     return zaehlstand;
    }
    

    Bin für jeden Typ dankbar.



  • Hallo

    Hallo

    du willst die Binärstellen einer Zahl in einen String schreiben?
    Das beste ist wohl Bitvergleich.
    Mein Vorschlag sieht so aus :

    // Parameter Zahl ist die umzuwandelnde Zahl, Max ist die 
    // maximale Vielfache von 2, in deinem Fall 1024
    AnsiString BCD(unsigned int Zahl, unsigned int Max)
    {
      AnsiString Result;
      if (Zahl >= Max) return("");
    
      while (Max > 0) // Alle Vielfachen von 2 im Bereich [Max, 1] durchgehen
      {
        if ((Zahl & Max) == Max) // Wenn Stelle an aktuellem Vielfachen von 2 belegt
          Result += "1";  // 1 anfügen
        else
          Result += "0"; // ansonten 0 anfügen
        Max >>= 1; // Bitshift für nächstkleinere Stelle 
        }
      return(Result);
      }
    
    ...
    AnsiString x = BCD(100, 1024);
    

    bis bald
    akari



  • HardRock schrieb:

    Ich versuche verzweifelt eine Methode zu schreiben eine dreistellige Zahl (bis 999) als BCD zurückzugeben.

    geht auch 4-stellig 😉

    #include <stdio.h> 
    
    unsigned int bcd (int x)
    {
        char b[16];
        sprintf (b, "%04d", x);
        return b[3]-'0' | b[2]-'0'<<4 | b[1]-'0'<<8 | b[0]-'0'<<12;
    }
    
    int main() 
    { 
        printf ("%x", bcd(9544));
        getchar();
        return 0; 
    }
    

Anmelden zum Antworten