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; }