int2hex



  • sprintf ist mir da zu langsam... hm

    bye



  • typedef int hex;
    
    hex int2hex (int i){
    	hex x = (hex)i;
    	return x;
    }
    


  • was ich wollte ist nur ascii code;) dh integer_wert + 0x30 😉

    bye



  • hexe schrieb:

    was ich wollte ist nur ascii code;) dh integer_wert + 0x30 😉

    bye

    Du hast also einen String mit einer Dezimalzahl und willst einen String mit einer Hexadezimalzahl haben, richtig?



  • ich hab eine dezimalzahl und will den ascii string haben!

    bye



  • hexe schrieb:

    ich hab eine dezimalzahl und will den ascii string haben!

    bye

    Also ein "char[] dezimalzahl"?



  • Tim schrieb:

    typedef int hex;
    
    hex int2hex (int i){
    	hex x = (hex)i;
    	return x;
    }
    

    😃 👍



  • ... wer sonst nichts zu sagen hat ...



  • matze_ schrieb:

    ... wer sonst nichts zu sagen hat ...

    Solltest du dir da nicht an die eigene Nase fassen? 🙄



  • int i,x,y = 0;	// i = integer to hex
    char c[10];
    
    while(i)
    {
    	x = i & 0x0F;		// Nibble freischneiden
    	i >>= 4;		// Nibble kürzen
    	c[y] = x + 0x30; 	// Nibble to char
    	y++;
    }
    
    	y--;			// Indexkorrektur
    
    for(x = y; x >= 0; x--)		// rückwärts auslesen
    {
    	// printf c[x] oder was auch immer
    }
    

    Ohne Test und Garantie auf Richtigkeit oder für Eleganz. Immer den untersten Nibble absägen, char aufheben und danach die Reihenfolge umdrehen. Bugs bitte selbst entsorgen. 😃

    matze_ schrieb:

    ... wer sonst nichts zu sagen hat ...

    Hauptsache, Tim konnte seinen "beliebten" und "hilfreichen" typedef- Kalauer wieder mal aufwärmen :p



  • #include <stdio.h>
    //...
    unsigned val = 255;
    char buff[10];
    sprintf(buff, "%02x", val);
    


  • pointercrash() schrieb:

    Hauptsache, Tim konnte seinen "beliebten" und "hilfreichen" typedef- Kalauer wieder mal aufwärmen :p

    der ist ja von zeit zu zeit auch wirklich lustig 😃



  • pointercrash() schrieb:

    Hauptsache, Tim konnte seinen "beliebten" und "hilfreichen" typedef- Kalauer wieder mal aufwärmen :p

    Warum nicht? Ich habe nichts gegen einen guten Witz, hin und wieder. Und er passt ja sogar hervorragend zum Thema!

    Außerdem denke ich sowieso, dass hexe ein Troll ist. Erst weiß sie nicht, dass "hex" (kann eigentlich keiner mehr hexadezimal aussprechen?!) kein Typ ist und sie ihren numerischen Wert darstellen kann, wie sie will. Dann ist ihr sprintf zu langsam, was ja irgendwie auf mehr als eine Übungsanwendung schließen lassen würde. Letztlich will sie dann doch nur den int-Wert als String darstellen (also plötzlich keine Rede mehr von hex). Und hier weiß sie dann aber schon, dass sie den numerischen Wert plus 0x30 rechnen muss, um auf den ASCII-Code zu kommen, das hexadezimale System ist ihr also nicht fremd. Dazu ist jedes Posting schön schwammig und doppeldeutig formuliert... 😮



  • _matze schrieb:

    Warum nicht? Ich habe nichts gegen einen guten Witz, hin und wieder. Und er passt ja sogar hervorragend zum Thema!

    Ne, besser ist er durch die Wiederholung auch nicht geworden.

    _matze schrieb:

    Außerdem denke ich sowieso, dass hexe ein Troll ist. ... Dann ist ihr sprintf zu langsam, Dazu ist jedes Posting schön schwammig und doppeldeutig formuliert... 😮

    Naja, Tatsache ist, daß sprintf mehr tut (Formatstringauswertung), als das, was man immer braucht. Und es wird heutzutage eindeutig zu sehr ohne Bedacht auf Performance programmiert. Stockende Blackberrys und humpelnde iPhones sind mithin die Folge. Der Performance- Doktor rät: Erstmal annehmen, Du hast nur `nen krüppeligen 8- Bitter.

    Selbst, wenn jemand nur mitnimmt, daß es sich gelegentlich lohnt, über Laufzeitverhalten nachzudenken, war`s das schon wert, ob hexe nun trollt oder nicht.



  • pointercrash() schrieb:

    Naja, Tatsache ist, daß sprintf mehr tut (Formatstringauswertung), als das, was man immer braucht. Und es wird heutzutage eindeutig zu sehr ohne Bedacht auf Performance programmiert. Stockende Blackberrys und humpelnde iPhones sind mithin die Folge. Der Performance- Doktor rät: Erstmal annehmen, Du hast nur `nen krüppeligen 8- Bitter.

    Da hast du schon Recht, keine Frage. Ich wollte ja auch eher darauf hinaus, dass diese Aussage eher nicht auf ein kleines Übungsprogramm eines Anfängers hindeutet (wenn auch möglich), ihre Fragen aber in eine ganz andere Richtung gehen. Du hast mein Posting ja auch ziemlich zerstückelt zitiert... 🙂



  • _matze schrieb:

    "hex" (kann eigentlich keiner mehr hexadezimal aussprechen?!)

    Abgesehen davon, dass das zwei unterschiedliche Systeme sind. Hexa ist nämlich zur Basis sechs (wird aber eigentlich eher selten benutzt 😉 ) wohin gegen hexadezimal zur Basis 16 ist.

    @pointercrash: Und wie sieht es bei dir mit A-F aus? 😉

    void toHexadecimal(int i, char *buf)
    {
    	int a;
    	for (a = 0; a < sizeof(int) * 2; ++a) {
    		buf[a] = (i >> (4 * (sizeof(int) * 2 - 1 - a))) & 0xf;
    		if (buf[a] < 10)
    			buf[a] += '0';
    		else
    			buf[a] += 'A' - 10;
    	}
    	buf[a] = 0;
    }
    


  • lagalopex schrieb:

    Abgesehen davon, dass das zwei unterschiedliche Systeme sind. Hexa ist nämlich zur Basis sechs (wird aber eigentlich eher selten benutzt 😉 ) wohin gegen hexadezimal zur Basis 16 ist.

    Na ja, mit "hex" meint man aber üblicherweise das Hexadezimal-System (Stichwort Hexeditor). 🙂



  • lagalopex schrieb:

    void toHexadecimal(int i, char *buf)
    {
    	int a;
    	for (a = 0; a < sizeof(int) * 2; ++a) {
    		buf[a] = (i >> (4 * (sizeof(int) * 2 - 1 - a))) & 0xf;
    		if (buf[a] < 10)
    			buf[a] += '0';
    		else
    			buf[a] += 'A' - 10;
    	}
    	buf[a] = 0;
    }
    

    ^^viel zu kompliziert.
    🙂



  • lagalopex schrieb:

    @pointercrash: Und wie sieht es bei dir mit A-F aus? 😉

    Kommt drauf an, unter ASCII zugegebenermaßen schlecht, der Displaycode von einem einfachen LCD paßt aber mit dem Offset genau. Das Beispiel war ja auch nur exemplarisch zur Darlegung des Prinzips. Wenn`s so stört, bitteschön:

    int i,x,y = 0;    // i = integer to hex
    char c[10];
    
    while(i)
    {
        x = i & 0x0F;        // Nibble freischneiden
        i >>= 4;        // Nibble kürzen
        if (x<10]
           c[y] = x + 0x30;     // Nibble to char '0' bis '9'
        else
           c[y] = x + 'A';     // Nibble to char 'A' bis 'F'
                               // Edit: von 'K' bis 'P' , schäm' mich ja schon
    ;) 
    
        y++;
    }
    
        y--;            // Indexkorrektur
    
    for(x = y; x >= 0; x--)        // rückwärts auslesen
    {
        // printf c[x] oder was auch immer
    }
    

    Besser so, Seele beruhigt? 😉

    _matze schrieb:

    lagalopex schrieb:

    Abgesehen davon, dass das zwei unterschiedliche Systeme sind. Hexa ist nämlich zur Basis sechs (wird aber eigentlich eher selten benutzt 😉 ) wohin gegen hexadezimal zur Basis 16 ist.

    Na ja, mit "hex" meint man aber üblicherweise das Hexadezimal-System (Stichwort Hexeditor). 🙂

    So, und wo wir schon alle beim Klugscheißen sind, korrekterweise heißt das Zahlensystem zur Basis 16 nämlich "Sedezimalsystem", auch wenn bei Hex jeder weiß, was gemeint ist. 😃



  • Ahja... 0-9 und K-P? :p

    Ich weiß zwar das wikipedia nicht das non-plus-ultra ist... aber zum flamen reichts noch:

    http://de.wikipedia.org/wiki/Sedezimalsystem schrieb:

    Alternative Bezeichnungen für hexadezimal (von griech. "hexa" und lat. "decem") sind hexadekadisch (Griechisch) und sedezimal (Latein) (Falsch hingegen ist der Begriff hexagesimal, der synonym zu sexagesimal ist und das Zahlensystem zur Basis 60 bezeichnet.).

    😃


Anmelden zum Antworten