Il tempo di provare, almeno. 
Veramente ne copi solo uno per volta.
codice:
strcpy_s(dueChar1[0],1,dueChar[i]);
strcpy_s(dueChar1[1],1,dueChar[i+1]);
il che equivale a:
codice:
dueChar1[0] = dueChar[i];
dueChar1[1] = dueChar[i+1];
Io farei una cosa simile a questa. Però non ho capito se il \x65 deve diventare 65 nel file output o serve una brutale conversione da int a char*
codice:
__declspec(dllexport) void Convert(HANDLE hFile, HANDLE hFiLE1)
{
DWORD dwbyteRead;
DWORD dwbyteWrite;
BYTE *dwSFP;
char dueChar1[2];
const char* occorrenza = "\\x";
int i;
int *dest;
int x=0;
int destPos=0;
int size = GetFileSize(hFile, NULL);
dwSFP = (BYTE*) calloc(size, sizeof(BYTE));
ReadFile(hFile, &dwSFP, size, &dwbyteRead, NULL);
dest = (int*) calloc(dwbyteRead,sizeof(int));
for (i=0; i<dwbyteRead-1; i+=2)
{
dueChar1[0] = dwSFP[i];
dueChar1[1] = dwSFP[i+1];
if(strncmp(dueChar1,occorrenza,2) //se i caratteri letti sono diversi da "\x" mi scrive sul buffer temporaneo.
{
dest[destpos++] = atoi(dueChar1);
}
}
WriteFile(hFile1, dest, destpos, &dwbyteWrite, NULL);
free(dwSFP);
free(dest);
}