String to Hex und wieder andersrum



  • Hallo zusammen,

    ein noch dämlicherer Titel fiel mir nicht ein, dafür schonmal sorry 😉

    Habe hier eine Funktion die ich aus einem VB-Source für C++ umgeschrieben habe. Hab zwar keinen Schimmer was sie macht aber jedenfalls funktioniert sie, sprich es kommt unten genau das raus was ich brauche.

    Jetz bräuchte ich die Funktion quasi andersrum, sprich was die eine unten ausgibt soll die neue als Parameter bekommen und als return eben das ausgeben, womit die andere gefüttert wurde. Hoffe es war halbwegs verständlich 😕

    Hier erstmal die Funktion die ich schon habe

    AnsiString Hauscode (AnsiString h1, AnsiString h2)
    {
    	int v1 = 0, v2 = 0;
    	// Input 1212 u. 3434
    
    	v1 = v1 | (StrToInt(h1.SubString(1,1)) - 1) * 64;
    	v1 = v1 | (StrToInt(h1.SubString(2,1)) - 1) * 16;
    	v1 = v1 | (StrToInt(h1.SubString(3,1)) - 1) * 4;
    	v1 = v1 | (StrToInt(h1.SubString(4,1)) - 1);
    
    	v2 = v2 | (StrToInt(h2.SubString(1,1)) - 1) * 64;
    	v2 = v2 | (StrToInt(h2.SubString(2,1)) - 1) * 16;
    	v2 = v2 | (StrToInt(h2.SubString(3,1)) - 1) * 4;
    	v2 = v2 | (StrToInt(h2.SubString(4,1)) - 1);
    
    	return (Hex (v1) + " " + Hex (v2));
    	// Output 11 BB
    }
    

    Die neue Func sollte dann z.B. als Parameter "11 BB" erhalten und "1212 3434" ausgeben.

    Kann mir da jemand helfen bzw. erklären was die obige überhaupt macht?

    Besten Dank schonmal 🙂



  • Wofür benötigst du denn die Funktion?
    Diese berechnet aus einer Zahl (bzw. aus zwei Zahlen) im 4er-System den entsprechenden Wert für das Hexadazimal(16er)-System (mit der eigenartigen Konvention, daß die Ziffern von 1-4 gehen, anstatt von 0 bis 3).

    Um umgekehrt aus der Hexzahl wieder eine Zahl im 4er-System zu machen, behilf dir mit folgender Tabelle:

    Hex(16er)   4er
    0           00
    1           01
    2           02
    3           03
    4           10
    5           11
    6           12
    7           13
    8           20
    9           21
    A           22
    B           23
    C           30
    D           31
    E           32
    F           33
    

    (bzw. für das eigenartige System jeweils 1 je 4er-Ziffer draufaddieren, d.h. aus 00 -> 11, 01 -> 12, ..., 32 -> 43, 33 -> 44)

    Alternativ kannst du auch die umgekehrte Rechnung mittels Hex->Int, und dann jeweils %4 (modulo-Operator) anwenden, durchführen.



  • Alles klar, habs raus 😉

    Danke! 👍


Anmelden zum Antworten