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 weiterich 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.