iconv gond (megoldva)

Fórumok

Használnék iconv-ot konvertálásra egy c progiban, de valahogy gondban vagyok.
Ha bash-ben futtatom le a pl echo "ö" | iconv -f utf-8 -t unicode > file , akkor rendesen kiteszi az értékeket (00F6). Viszont a c progiba valami gond van, mert ott ugyan ezt az "ö" betüt FFFFFFF6 -nak konvertálja.
A nem ékezetes betüket rendesen csinálja.

Mivel érhetném el, hogy ugyan úgy csinálja mint bash-ben?

char utf_in[1024];
in_size=strlen(in);
out_size=1023;
outptr=utf_in;
inptr=in;
memset((char *)&utf_in,0,sizeof(utf_in));
cd = iconv_open("unicode", "utf-8");
if (cd==((iconv_t)(-1)))
{
fprintf(stdout,"Unknow code page: %s!\n",config.convout);
return(-1);
}
if (iconv(cd, &inptr, &in_size, &outptr, &out_size)==((size_t)(-1)))
{
fprintf(stdout,"Wrong input string!\n");
return(-1);
}

iconv_close(cd);
num1=0;
for (num=2;num<(1023-out_size);num+=2)
{
printf("%.4X",(unsigned int)utf_in[num]);
}

Hozzászólások

Az utolsó sorban char-t (1 byte-os előjeles mennyiséget) cast-olsz unsigned int-té, naná hogy így viselkedik. Amit te akarsz, ahhoz először unsigned char-rá kell alakítani.
Egyébként nem értem, miért az "in" (tehát bemeneti) buffert akarod kiírni a végén, és az "outptr=utf_in" sor is felettébb gyanús, mintha kimenetként ugyanazt a puffert akarnád használni, mint a bemeneti, ami maximum akkor tud működni (de akkor is meredek), ha garantált, hogy a kimenet nem lehet hosszabb a bemenetnél, ami ugye utf8->ucs4 konverzió esetén picit sincs így.