I am learning C and decided to make an implementation of Base64 encoding according to the info Wikipedia provides about it. Here are all files, my main question is: should I declare the index_table array inside the get_base64_digit function (static char index_table[] = "blabla") though a general code review would be appreciated. funcs.c static char index_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static char get_index_digit(int x) { return index_table[x]; } char get_base64_digit(const unsigned int base64, int digit_number){ switch (digit_number){ case 0: return get_index_digit(base64 >> 18); case 1: return get_index_digit((base64 >> 12) & 077); case 2: return get_index_digit((base64 >> 6) & 077); case 3: return get_index_digit(base64 & 077); } return '\0'; } funcs.h #include <stdio.h> #include <string.h> char get_base64_digit(unsigned int base64, int digit_number); main.c #include "funcs.h" int main(int argc, char* argv[]){ char* text = argc == 2 ? argv[1] : '\0'; unsigned final, temp; int text_len = strlen(text); int remainder = text_len % 3; //Iterate over the input string, three characters at a time. for (int x = final = temp = 0; x < (remainder == 0 ? text_len : text_len - remainder); x += 3) { final = (text[x] << 16) | (text[x+1] << 8) | text[x+2]; printf("%c%c%c%c", get_base64_digit(final, 0), get_base64_digit(final, 1), get_base64_digit(final, 2), get_base64_digit(final, 3)); } //Handle the last bytes in case text_len wasn't a multiple of 3 if (remainder == 1) { final = text[text_len-1] << 16; printf("%c%c==\n", get_base64_digit(final, 0), get_base64_digit(final, 1)); } else if (remainder == 2){ final = (text[text_len-2] << 16) | (text[text_len-1] << 8); printf("%c%c%c=\n", get_base64_digit(final, 0), get_base64_digit(final, 1), get_base64_digit(final, 2)); } else return 0; return 0; }