mi dispiace ma questo codice non può funzionare... per 2 motivi:
buffer viene creato quando esegui la funzione, e va out of scope in seguito. Questo vuol dire che non ritorni la stringa che hai appena ottenuto, ma della memoria spazzatura;
pbuffer+=2 non è proprio bello da vedere; se assumiamo che i caratteri passati siano nel range 'a'..'z' allora può andare, ma nel caso di caratteri che sono rappresentati con una singola cifra lascieresti uno spazio( un esempio è il newline, che in esadecimale è A ).
Inoltre, itoa() non è una funzione standard, quindi non puoi essere sicuro che vada su tutti i compilatori.
Una soluzione migliore sarebbe questa:
https://ideone.com/X7Mv8
Una soluzione _veramente_ in C++ userebbe uno stringstream e la classe string, ma non mi pare il caso