¿Cómo se convierte una matriz de bytes en una cadena hexadecimal en C?

Yo tengo

uint8 buf[] = {0, 1, 10, 11};

Quiero convertir la matriz de bytes en una cadena para poder imprimir la cadena usando printf:

printf("%s\n", str);

and get (los dos puntos no son necesarios):

"00:01:0A:0B"

Cualquier ayuda sería muy apreciada.