Разобрался методом "тыка". написал функцию. Если кому нужно будет то вот.
void ucode(char* buf, char* dest)
{
int i,k = 0;
for(i = 0;;i++,k += 2)
{
if(buf[i] == 0){dest[k] = 0; return;};
if(buf[i] <= -1 && buf[i] >= -16){dest[k] = -47; dest[k+1] = buf[i] - 112; continue;};
if(buf[i] <= -17 && buf[i] >= -32){dest[k] = -48; dest[k+1] = buf[i] - 48; continue;};
if(buf[i] <= -33 && buf[i] >= -64){dest[k] = -48; dest[k+1] = buf[i] - 48; continue;};
if(buf[i] == -72){dest[k] = -47; dest[k+1] = -111; continue;};
if(buf[i] == -88){dest[k] = -48; dest[k+1] = -127; continue;};
dest[k] = buf[i]; k--;
};
};
char* buf - строка в кодировке win1251
cher* dest - буффер для новой строки.
Гланвое следите за тем чтобы размер dest был как минимум в 2 раза + 1 больше чем buf.