char, short, int, long to hex so richtig?



  • volkard schrieb:

    MrSpoocy schrieb:

    Ich bin jetzt auch unschlüssig was am ende die "richtige" Lösung ist.

    Die "richtige" Lösung ist natürlich nur ein kurzlebiger Proxy, der vom op<<(ostream verstanden wird.
    Und lass die Kindereien in Sachen ">>4" und "i&0xF", wir sind nicht mehr im Gipskrieg.

    https://de.wikipedia.org/wiki/Gips#.C3.9Cbertragene_Bedeutung 😃

    Naja, der TE wollte nur eine Template-Funktion haben. Scheinbar hat er sich auch entsprechende Gedanken gemacht.
    Wenn es eine bessere Lösung gibt sollte sie hier schon angesprochen werden, am besten mit Erklärung warum.

    Ich würde vorschlagen das er sie erstmal parkt bis er sich mit Operator-Überladung etc. besser auskennt.
    Dann kann er ja weiter dran arbeiten.

    Mir fällt jetzt auch nur sowas ein, bin aber selbst kein Profi und hab mich hier angemeldet um meine C++-Kentnisse
    aufzfrischen und zu aktualisieren.
    Wenn es eine bessere Lösung gibt nur her damit 🙂

    ...
                // Anzahl Halb-Bytes -1
                // weil eine Hexziffer = 4 Bit
    for (int i = size * 2 - 1; i >= 0; i--)
        {
          // value mit 0xf 'and' verknüpfen. Bsp:
          // Value:  0101001100011011
          // & (0xf) 0000000000001111
          //       = 0000000000001011
          // Ergebnis an ss anhängen   
          ss << (value &= 0xf); // Klammern unnötig aber besser lesbar
    
          // value um 4 Bits nach recht verschieben
          // und Ergebnis wiederum in value speichern (>>=)
          // Bsp.: Aus 0101001100011011
          //      wird 0000010100110001
          value >>= 4;
          ...
        }
    ...
    

    Meine Lösung vermeidet die ständige Multiplikation, soweit ich weiß ist die teurer als Bitshift.
    Mal davon abgesehen das der Bitshift ja trotzdem gebraucht wird...

    So, muss jetzt Winterreifen drauf machen, bis später...

    dirkski



  • Der Gedanke der Template-Funktion war, mir 4 Funktionen zu sparen welche im Grunde das gleiche machen und sich nur durch den Parameter unterscheiden.

    Ich muss sagen ich kann mir gerade keinen Reim darauf bilden, wie ich dort etwas mit Operator-Überladung hin bekomme 😕 Aber wie schon erwähnt, bin ich in C++ eben nicht so bewandert und freue mich über jede Hilfe. Um so mehr schätze ich unter anderem Beiträge wie die von Finnegan und dirkski, welche einem auch erklären was genau da passiert. Nur so kann ich das wissen ja auch nachvollziehen und verstehen.



  • dirkski schrieb:

    Meine Lösung vermeidet die ständige Multiplikation, soweit ich weiß ist die teurer als Bitshift.

    Hätte gerne mal eine Messung dazu mit eingeschalteten Compileroptimierungen.



  • volkard schrieb:

    dirkski schrieb:

    Meine Lösung vermeidet die ständige Multiplikation, soweit ich weiß ist die teurer als Bitshift.

    Hätte gerne mal eine Messung dazu mit eingeschalteten Compileroptimierungen.

    Ich kann mir nicht vorstellen das da ein signifikanter Unterschied ist.
    Sowas könnte der Compiler doch wegoptiemieren. Tja, und genau von den Optimierungen die heute möglich sind hab ich kein Plan.

    volkard schrieb:

    Und lass die Kindereien in Sachen ">>4" und "i&0xF", wir sind nicht mehr im Gipskrieg.

    Welche Lösung schlägst Du vor?



  • dirkski schrieb:

    Welche Lösung schlägst Du vor?

    /16 und %16
    wobei das Interpretationssache ist. Für mich ist das Problem der Zahlenbasisumwandlung in der Arithmetik daheim, so Mathe-Sachen, das ist für mich nicht beim Bitgefummle daheim.
    Wenn Du sagst, daß Du da keine Zahlen siehst, sondern nur Bits und Nybbles, ist & und >> angemessener.



  • volkard schrieb:

    dirkski schrieb:

    Welche Lösung schlägst Du vor?

    /16 und %16
    wobei das Interpretationssache ist. Für mich ist das Problem der Zahlenbasisumwandlung in der Arithmetik daheim, so Mathe-Sachen, das ist für mich nicht beim Bitgefummle daheim.
    Wenn Du sagst, daß Du da keine Zahlen siehst, sondern nur Bits und Nybbles, ist & und >> angemessener.

    Ja, hast recht. So könnte man das machen. Ich bin tatsächlich mehr so ein Bitschieber und denke auch so. 🙂

    Einen schönen Abend noch, muss zum Ausgleich jetzt etwas Handwerken...

    dirkski


Anmelden zum Antworten