M
Wenn es reicht, dass die Bits für eine Anzeigestelle jeweils in einem char platziert werden, könntest du den folgenden Code nutzen. Du musst aber darauf achten, dass die Funktion der Einfachheit halber die Zahl von der Stelle mit der geringsten Wertigkeit zur Stelle mit der höchsten Wertigkeit abarbeitet, die Werte im Buffer also "verkehrt herum" vorliegen.
// 0 - 01111110
// 1 - 00110000
// 2 - 01101101
// 3 - 01111001
// 4 - 00110011
// 5 - 01011011
// 6 - 01011111
// 7 - 01110000
// 8 - 01111111
// 9 - 01111011
unsigned char bittable[] = {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};
size_t intto7seg(unsigned int bin,char *buffer) {
size_t len = 0;
do {
buffer[len++] = bittable[bin % 10]; //Der Wert der letzten Stelle wird als Index der Umsetzungstabelle genutzt
bin /= 10; // Ganzzahlige Division, die letzte Stelle wird also "abgeschnitten"
} while(bin!=0);
return len;
}
int main() {
char *ballo = malloc(20);
size_t len = intto7seg(1234567890,ballo);
for (size_t i=(len-1);i>=0;i--) {
printf("%X ",ballo[i]);
}
free(ballo);
return 0;
}