char ein oder zweistellig
-
Hi,
wie möchte gern eine beliebige Zahl in einem Char abspeichern; ist diese Zahl einstellig darf nur eine Stelle verwendet werden ohne eine führnede Null; bei zwei Stellen müssen zwei Stellen natürlich dafür aufgewendet werden.
unsigned int 0x03; //-> char[0] = '0' + 3; unsigned int 0x12; //-> char[0] = '0' + 1; //-> char[1] = '0' + 2;
-
^^ja, du brauchst pro ziffer ein 'char'
-
Wo genau ist denn jetzt das Problem bzw. die Frage? So eine Umwandlung kannste jedenfalls mit itoa oder sprintf machen.
-
+fricky schrieb:
^^ja, du brauchst pro ziffer ein 'char'
sorry für meine umständliche Beschreibung...
Aber wie bekomm ich einfach heraus, dass eine solche Zahl nur eine / oder zwei Stellen beansprucht, wenn ich Zahlen kleiner als 16 ist?
unsigned int 0x03; //-> char[0] = '0' + 3; /* hier soll nicht char[0] = '0' + 0 und char[1] = '0' + 3 entstehen */ unsigned int 0x12; //-> char[0] = '0' + 1; //-> char[1] = '0' + 2; //im Programmcode sieht dass dann so aus in etwa: void funktion(unsigned int zahl) { char testarray[6]; testarray[0] = (zahl >> 28); testarray[1] = (zahl >> 24); //usw //bei 0x03 will ich aber nicht, dass diese 0 auch gespeichert wird im //array sondern nur die Zahl 3 }
Gruß
-
Jetzt hab ich die genaue Erklärung: sämtliche Nullen in der int-Zahl an den Positionen 1, 3, 5, 7 will ich nicht im char-Array gespeichert haben
z.B. 0x030040 muss ich char array heißen 3, 0, 4, 0
-
fragensteller nbr1 schrieb:
z.B. 0x030040 muss ich char array heißen 3, 0, 4, 0
Wie ist da die Regel? Lasse die erste 0 weg, lasse die zweite 0 weg? Wohl ehr ein Schreibfehler, denk ich mal.
Also ich geb dir mal einen Tip für die Auswertung, verUNDe jede Stelle und fange an zu speichen sobald die erste Stelle != 0 ist, z.B. so:
speichern = eingabe & 0xF0000000
wenn speicher != 0 -> speichern in char, setzte flag speicherung begonnen
speichern = eingabe & 0x0F000000
wenn speicher != 0 OR flag speicherung begonnen = TRUE -> speichern in char, setzte flag speicherung begonnen
:
:
:
den Code dafür schreib ich dir jetzt nicht
-
vielleicht so?
void mach_was (int x, char *p) // ist ist der wert, p zeigt aufs array { do { p += sprintf (p, "%x", x>>24); x <<= 8; } while (x); }