iconv gond (megoldva)

 ( kaltsi | 2008. január 24., csütörtök - 14:45 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Nem hiszem, hogy ez a gond, de hátha:

Itt: http://www.gnu.org/software/libiconv/documentation/libiconv/iconv_open.3.html
nincs olyan formátum, hogy "unicode", szerintem neked "UCS-2"-k valamelyike kell...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

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.

köszi a válaszokat, valóban a típus konverzió okozta a hibát
a kiirandó változót felbontottam 2 unsigned char részre, és így tuti