Se fai

p1++

e

p1+=2;

nel ciclo, il puntatore si sposta di 3 posizioni invece che di 2 ...

Puoi semplicemente togliere il primo incremento e far diventare la riga

sscanf(p1, "%02X", d++);

Ma se tu avessi fatto un minimo di debug, l'avresti notato subito ...