base64 wie funktioniert das mit den hex?



  • Moin
    ich würde gerne in einen text in base64 umwandeln wie das in binär funktioniert weis ich (von wikipedia) jetzt habe ich im internet schon ein paar beispiel codes gefunden
    die machen das irgend wie mit hex zahlen
    ich habe da das prinzip mit den hexzahlendoch noch nicht ganz durchblickt
    könnte mir das vileicht jemand erklären wie das mit hex zahlen funktioniert?
    und wie ich in c++ mir ein char in hex ausgeben kann und damit "rechnen" kann



  • Selbst wenn du auf dem Monitor Hex-Zahlen siehst, wird der Computer intern mit binären Werten hantieren - das ist nur eine andere Darstellungsform für die selben Daten.

    Ansonsten: Base64-Daten fassen je 6 Bit zu einem Block zusammen, Hex-Zahlen(folgen) je 4 Bit zu einem Block (aka "Nibble"). Jetzt mußt du nur noch die Werte passend übereinanderlegen:

    Bit-Nummer:   0 1 2 3 4 5 6 7 8 9 A B
    Hex-Nibble:  |   0   |   1   |   2   |
    Base64:      |     0     |     1     |
    

    Wie du siehst, kannst du aus jeweils drei Hex-Ziffern zwei Base64-"Ziffern" herausholen:

    //die Umrechnung von Zeichen in Hex-Ziffern bzw. von Zahlen in ihre Base64 Codes überlasse ich dir
    for(i=0,j=0;i<strlen(hex);i+=3;j+=2)
    {
      b64[j]   = (hex[i]<<2) | (hex[i+1]>>2);
      b64[j+1] = (hex[i+1]<<4) | hex[i+2];
    }
    


  • erstmal danke für die antwort

    also wenn ich es richtig verstehe
    ist hex ein char(oder doch ein string?) wo z.b drine steht 1F2F3F4F...
    in der schleife geht er immer 3 felder weiter
    und die zeile ->(hex[i]<<2) | (hex[i+1]>>2); <-
    zieht 2 bit von den acht bit ab macht sechsbit draus und hängt die restlichen 2 bit wieder vorne ran so das die 2 abgezogenen bits als nästes kommen?
    somit besteht das näste feld aus 10 bitzs in der 2ten zeile nimmt er nun 4 von den 10 bits weg so das ich wieder 6 bits habe?
    und jetzt komme ich grade nicht weiter

    ich glaub ich habe grade ne große denkblockade
    ist das erstmal überhaupt richtig so wie ich es verstanden habe?



  • Wie ich schon geschrieben habe, mußt du dich schon selber darum kümmern, die lesbaren Hex-Daten in den Wertebereich 0 bis 15 zu pressen - und dann wäre "hex" ein Array von 4-Bit Werten (du kannst z.B. immer zwei in einen char zusammenpacken - oder du setzt jeweils die oberen 4 Bit eines char auf 0).

    Die Bit-Operationen nehmen jeweils insgesamt drei Hex-Ziffern und verteilen sie dann entsprechend des angegebenen Schemas auf zwei Zahlen (zwischen 0 und 63), die du dann in der Base64-Codetabelle nachschlagen kannst.


Anmelden zum Antworten