#include #include #include static unsigned char *base64 = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static void enclode_char(unsigned long bb, int srclen, unsigned char *dest, int j) { int x, i, base; /* 最終位置の計算 */ for ( i = srclen; i < 2; i++ ) bb <<= 8; /* BASE64変換 */ for ( base = 18, x = 0; x < srclen + 2; x++, base -= 6) { dest[j++] = base64[ (unsigned long)((bb>>base) & 0x3F) ]; } /* 端数の判断 */ for ( i = x; i < 4; i++ ) { dest[j++] = (unsigned char)'='; /* 端数 */ } } static void enclode(const unsigned char *src, unsigned char *dest) { unsigned char *p = (char *)src; unsigned long bb = (unsigned long)0; int i = 0, j = 0; while (*p) { bb <<= 8; bb |= (unsigned long)*p; /* 24bit単位に編集 */ if (i == 2) { enclode_char(bb, i, dest, j); j = j + 4; i = 0; bb = 0; } else i++; p++; } /* 24bitに満たない場合 */ if (i) enclode_char(bb, i - 1, dest, j); } main() { char *src = "Hello"; char dest[100]; memset(dest, 0, sizeof(dest)); /**/ enclode(src, dest); /**/ printf("dest = %s\n", dest); }