12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #include <string.h>
- #include "int.h"
- #include "xmlrpc-c/base64_int.h"
- void
- xmlrpc_base64Encode(const char * const chars,
- char * const base64) {
- /* Conversion table. */
- static char tbl[64] = {
- 'A','B','C','D','E','F','G','H',
- 'I','J','K','L','M','N','O','P',
- 'Q','R','S','T','U','V','W','X',
- 'Y','Z','a','b','c','d','e','f',
- 'g','h','i','j','k','l','m','n',
- 'o','p','q','r','s','t','u','v',
- 'w','x','y','z','0','1','2','3',
- '4','5','6','7','8','9','+','/'
- };
- unsigned int i;
- uint32_t length;
- char * p;
- const char * s;
-
- length = strlen(chars); /* initial value */
- s = &chars[0]; /* initial value */
- p = &base64[0]; /* initial value */
- /* Transform the 3x8 bits to 4x6 bits, as required by base64. */
- for (i = 0; i < length; i += 3) {
- *p++ = tbl[s[0] >> 2];
- *p++ = tbl[((s[0] & 3) << 4) + (s[1] >> 4)];
- *p++ = tbl[((s[1] & 0xf) << 2) + (s[2] >> 6)];
- *p++ = tbl[s[2] & 0x3f];
- s += 3;
- }
-
- /* Pad the result if necessary... */
- if (i == length + 1)
- *(p - 1) = '=';
- else if (i == length + 2)
- *(p - 1) = *(p - 2) = '=';
-
- /* ...and zero-terminate it. */
- *p = '\0';
- }
|