Some additional thoughts after [@Mat](http://codereview.stackexchange.com/a/119849/29485) fine answer. 1. When implementing an algorithm that counts on a particular size of integer, better to use a size that is guaranteed to work, or consider fixed size types. `unsigned` may only be 16-bit. Insufficient for the task. #include <stdint.h> // unsigned finalfinal; // Options in order of (my) preference uint32_t finalfinal; unsigned long finalfinal; uint_fast32_t finalfinal; 2. For maximum portability, consider that 16-bit machines are very popular in the embedded world in 2016, so do not assume `unsigned/int` math is at least 32-bit, code to C spec which says an `unsigned` may only be 16-bit. A 16-bit shift of `text[x]`, which is promoted to `int`, may not work. // finalfinal = (text[x] << 16) | (text[x+1] << 8) | text[x+2]; finalfinal = (text[x]*1UL << 16) | (text[x+1]*1UL << 8) | text[x+2]; // or finalfinal = text[x]; finalfinal <<= 8; finalfinal |= text[x+1]; finalfinal <<= 8; finalfinal |= text[x+2]; // final = text[text_len-1] << 16; final = text[text_len-1]*1UL << 16; 3. Recommend similar thoughts for the function parameters, variables too. // char get_base64_digit(const unsigned int base64, int digit_number) int get_base64_digit(const uint32_t base64, unsigned digit_number) 4. Extending the code to non-nulll character terminated sources. Current code works fine for test, yet all the following code should be wrapped in a function with the data pointer and size passed in. char* text = ... size_t text_len = strlen(text); // Something like this is the real function you need int status = NMK64_encode(text, text_len); 5. `funcs.c` is not distinctive. How about `NMK_Base64.c`? 1. Minor stuff follows 1. Use matching type. `strlen()` return type `size_t`, not `int`. // int text_len = strlen(text); // int remainder = text_len % 3; size_t text_len = strlen(text); size_t remainder = text_len % 3; 2. Make `const` // static char index_table[] = ... static const char index_table[] = ... 3. Make `static`. Would not expect this helper function to have global usage. Expect `NMK64_encode(text, text_len)` to be the global interface. // get_base64_digit( static int get_base64_digit( ...