Hoy he tenido que hacer bastantes conversiones de base64 y me he hecho un pequeño .bat usando PHP para solventar el tema:

base64_decode.bat  
@echo off  
@%~dp0\php.exe -r"$data = base64_decode('%1'); $data_hex = unpack('H*', $data); echo 'HEX:\'', strtoupper(implode(' ', str_split($data_hex[1], 2))), \"'\n\"; echo 'BIN:\'', $data, \"'\n\";"
C:\>base64_decode SG9sYSBtdW5kbw==  
HEX:'48 6F 6C 61 20 6D 75 6E 64 6F'  
BIN:'Hola mundo'

El caso es que la última vez que escribí sobre programación funcional en php, no me había planteado en usarlo con cadenas nunca.

Como las funciones array_map, array_filter, array_reduce y similares trabajan con arrays, no se pueden aplicar a cadenas directamente.

Ahí es donde entra en juego la función str_split.
Para poder utilizar cadenas con las funciones de arrays, hay que convertir la cadena en un array primero. Con str_split se puede colocar grupos de caracteres de una cadena en un array.
Luego mediante la función implode podemos juntar el array resultante de la forma que nos interese.

Separar caracteres de dos en dos dejando un espacio entre ellos.

php -r"echo strtoupper(implode(' ', str_split('0102030405', 2)));"  
01 02 03 04 05  

Eliminar caracteres no imprimibles de una salida.

php -r"echo implode('', array_filter(str_split(\"Hello world\1\2\3\x10\x19test\", 1), 'ctype_print'));"  
Hello worldtest  

Reemplazar caracteres no imprimibles por otro caracter (‘?’) en una salida :

php -r"echo implode('', array_map(function($v) { return ctype_print($v) ? $v : '?'; }, str_split(\"Hello world\1\2\3\x10\x19test\", 1)));"  
Hello world?????test