Steck
написал 16 мая 2006 года в 08:58 (714 просмотра)
Ведет себя
как мужчина; открыл 125 тем в форуме, оставил 550 комментариев на сайте.
#include #include #include char *decode(char *src, int len) { char *Out=NULL; int i; Out = (char*) malloc (len/4+1 ); for(i=0; i < len/2; i++) { printf("%s\n",&src[2*i]); sscanf(&src[2*i],"%02X",&Out[i]); } return Out; } char *charset_encode(unsigned char *src, char *toCODE, char *fromCODE) { static iconv_t cd; char *to=NULL; unsigned short nLen = strlen(src) *2; char *to_p = (char *)malloc(nLen + 1); to = to_p; unsigned char *OutStr=""; size_t InSize=0,OutSize=0; int i; cd = iconv_open(toCODE,fromCODE); if(cd == (iconv_t)-1){ printf("iconv()\n"); exit(0); } InSize = strlen(src); OutSize = nLen; if(iconv(cd,(const char **)&src,&InSize,&to,&OutSize)==(size_t)-1) { printf("iconv()\n"); exit(0); } iconv_close(cd); for(i = 0; i < nLen - OutSize ; i++) { OutStr=g_strdup_printf("%s%c",OutStr,to_p[i]); } return OutStr; } int main(int argc, char *argv[]) { printf("%s\n",charset_encode( decode(argv[1],strlen(argv[1])), "KOI8-R","UCS-2")); }
Собрираю прогу и передаю ей параметр строки
[steck(~)]$ gcc `pkg-config --cflags --libs gtk+-2.0` -liconv -I/usr/local/include/ -L/usr/local/lib conv.c -o conv [steck(~)]$ ./conv 044F0445044A044900200044F 044F0445044A044900200044F 4F0445044A044900200044F 0445044A044900200044F 45044A044900200044F 044A044900200044F 4A044900200044F 044900200044F 4900200044F 00200044F 200044F 0044F 44F яхъщ
На выводе обрезает почему то все символы которые идут после 'пробела'
Символ 0020
Вот хоть убей всегда все что после 0020 урезает (
Где ошибка ткните носом плиз
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
imho, у тебя тут косячок-с. должно быть так:
[steck(~)]$ ./conv 044F0445044A04490020044F
да но это тоже не рашает проблему :( все что после 0020 пропадает неизвесно куда
может, пропадает всё, что после «00» — который кодируется и, вероятно, понимается, как «\000» — символ окончания строки?
Да возможно
но если кодировать сразу по 4е символа
То потом iconv()
ругается :-(
ну попробуй в другую сторону сперва сделать — из KOI8-R в UCS-2.
посмотри, какое там получается кодирование.
и уже его пытайся обратно перекодировать.
гг. ты когда научишься компилировать с опцией -Wall?
напр. gcc меня ткнул носом вот в этот
он замечательно работает на x86, но на little-endian машине, судя по всему перестанет. но это так — к слову.
ты уверен в корректности работы strlen с ucs2 строками?