Post date: May 07, 2021 1:23:48 AM
#include <stdio.h>
#include <stdint.h>
char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxyz0123456789-_";
uint32_t conv2base64(uint32_t x)
{
uint8_t a, b, c, d;
a = base64[(x >> 18) & 0x3f];
b = base64[(x >> 12) & 0x3f];
c = base64[(x >> 6) & 0x3f];
d = base64[ x & 0x3f];
return (a<<24) | (b<<16) | (c<<8) | d;
}
// driver code: Checks if 'Man' gives 'TWFu'
void main()
{
uint32_t x, y;
uint8_t msg[5];
x = 'M'<<16 | 'a'<<8 | 'n'; // assemble
printf("%X\n", x);
y = conv2base64(a); // convert
msg[0] = y>>24; // extract chars
msg[1] = y>>16;
msg[2] = y>>8;
msg[3] = y;
msg[4] = 0;
printf("%s",msg);
}
A more compact driver uses union.
void main()
{
uint32_t x;
union Data {
uint32_t y;
uint8_t msg[5];
} data;
x = 'f'<<16 | 'o'<<8 | 'o'; // assemble
printf("%X\n", x);
data.msg[4] = 0; // string terminator
data.y = conv2base64(x); // convert
printf("%s", data.msg);
}