realloc-Problem
-
Warum eigentlich nicht einfach printf("%x", num); ?
-
das frag ich mich jetz auch
vielleicht will er mal ausprobieren, ob er so eine funktion hinbekommt.
da fehlt aber noch etwas konzeptwissen über pointer und c strings
-
Hallo,
c.rackwitz schrieb:
probier mal itoa(), wenn du nur die funktion nicht gefunden hast.
bitte nicht itoa im ANSI-C-Forum (->sprintf).
MfG
-
Hm, mir war grad langweilig also hab ich auch mal eine Funktion gehaxx0rt:
void int2hex2(unsigned int zahl) { int i, t; char res[9]={}; for(i=7; i >= 0; zahl>>=4, i--){ t=(zahl & 0xF); res[i]=t==10?'A':t==11?'B':t==12?'C':t==13?'D':t==14?'E':t==15?'F':t+'0'; } printf("%s\n", res); }
-
und die hier ist meine:
void inttohex(char *result, int value, int chars) { char *hexchars="0123456789ABCDEF"; result += chars; *result = 0; // NULL-terminated strings! while (chars-- > 0) { *(--result) = hexchars[value & 0x0F]; value = value >> 4; } }
sorry für das itoa(), da hab ich noch nicht nachgeschaut...
-
Ich hab mal unsere Lösungen kombiniert und konnte den Code nochmal verkürzen:
void int2hex3(unsigned int zahl) { int i; char res[9]={}; for(i=7;i>=0;res[i--]="0123456789ABCDEF"[zahl&0xF],zahl>>=4); printf("%s\n", res); }
-
lol, ich kanns mir nicht verkneifen, sry
void int2hex4(unsigned int z) {for(int i=7;i-->=0;printf("%c","0123456789ABCDEF"[z&0xF]),z>>=4);}
jetz is es ein geiler einzeiler!
-
Aber es ist kein gültiger C Code mehr und die Ausgabe ist verkehrt herum. Das umdrehen ist der einzige Grund, warum ichs auch nicht in eine Zeile gebracht habe. Trotzdem sehr roxx0r
-
ich merks grad und werkel schon
-
klar geht ein einzeiler
void int2hex(unsigned int z){if(z){int2hex(z>>4);printf("%c","0123456789abcdef"[z&15]);}}
-
hier noch meine überarbeitete version
void int2hex5(unsigned int z) {for (int i=0;i++<8;printf("%c","0123456789ABCDEF"[(z & 0xF0000000)>>0x1C]),z<<=4);}
[edit] und wehe, einer versteht das *g*
-
Hier meine neue Version:
void int2hex5(int z){ for(int i=7;i>=0;printf("%c","0123456789ABCDEF"[(z>>i*4)&(0xF)]),i--);}
Die Reihenfolge is jetzt richtig herum. In C müsste man halt das int aus der Schleife rausziehen aber sonst funzt es
@c.rackwitz: Wenn das so weitergeht müssen wir unsere Funktionen in namespaces packen
-
@Windalf: Dass dir du bei so kryptischen Haxx0r-Funktionen mitmachen würdest war mir klar
-
@Windalf: Dass dir du bei so kryptischen Haxx0r-Funktionen mitmachen würdest war mir klar
ja so ein Glück das ich gerade eben vorbeigeschaut habe
aber mein code ist weniger kryptisch als der von euch
-
ich merk grad, ich kann noch was sparen
void int2hex6(int z) {for (int i=0;i++<8;printf("%c","0123456789ABCDEF"[(z&(15<<7))>>0x1C]),z<<=4);}
[edit] aber Windalf hat echt die kürzeste Variante. Ist nur zu hoffen, dass es nicht irgendwann numerische Datentypen gibt, die größer als der Stack sind.
[noch ein edit] was hat das hier eigentlich noch mit realloc zu tun?
-
das frisst mein compiler auch noch weiss aber nicht obs nach ansi-c ist...
void int2hex(unsigned int z){z?int2hex(z>>4),printf("%c",z%16+48+(z%16>9)*7):0;}
[edit]
*kopfklatsch* putchar ist natürlich auch kürzer als printf...
[/edit]
-
Meine aktuelle Fassung:
void f(int z){for(int i=7;i>=0;putchar("0123456789ABCDEF"[z>>i--*4&15]));}
Es sind mit Leerzeichen übrigens 74 Zeichen
-
interpreter schrieb:
Warum eigentlich nicht einfach printf("%x", num); ?
das wär zu einfach *LOL*
-
Windalf schrieb:
[edit]
*kopfklatsch* putchar ist natürlich auch kürzer als printf...
[/edit]Nachmacher
-
@interpreter
hmm also nur f zu nehmen kommt meiner version klar zu gute:Dvoid f(int z){z?f(z>>4),putchar(z%16+48+(z%16>9)*7):0;}
56...
auf das mit dem putchar bin ich übrigens unabhängig von dir gekommen hab ich auch erst bei dir gelesen als ich mein post editiert habe (war vorher bei putc und hab dann stdin verwendet und deswegen auch das kopfklatsch warum ich nicht gleich putchar verwendet habe