免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1849 | 回复: 0
打印 上一主题 下一主题

[函数] 求救:iconv函数用gcc和g++编译运行结果不同 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-21 09:35 |只看该作者 |倒序浏览
求救:为什么iconv函数通过gcc编译和通过g++编译出来的运行结果不一样啊?

测试结果:
$ gcc -o t t.c
$ g++ -o tt t.c
$./t
0xC4 0xE3 0xBA 0xC3
converting...
unicode=0xFF 0xFE 0x60 0x4F 0x7D 0x59
$ ./tt
0xC4 0xE3 0xBA 0xC3
converting...
unicode=0xFF 0xFE 0x60 0x4F 0x7D 0x59 0xFF 0xBF 0x30 0xF3 0xFF 0xBF 0xF8 0xA3

测试代码如下:
#include <iconv.h>;
#include <stdio.h>;
#include <string.h>;

#define CONV_BUF_LEN 1000

unsigned char itohex(unsigned char i)
{
if(i>;9) return i-10+'A';else return i+'0';
}

void outbin(char * pbuf) {
char *p = pbuf;
unsigned char ch;
if (!p)  return;
while (*p) {
   ch=*p;p++;
   printf("0x%c%c ", itohex(ch/16),itohex(ch%16));
}

printf("\n";
}

int gb2312_to_unicode(char* inbuf, char *outbuf)
{
        iconv_t cd;
        char* pin = inbuf;
        char* pout = outbuf;
        size_t inlen;
        size_t outlen = CONV_BUF_LEN - 1;

        outbin(inbuf);
        inlen = strlen(inbuf);
        if((cd = iconv_open("unicode","gb2312") < 0) return -1;
        printf("converting...\n";
        if(iconv(cd, &pin, &inlen, &pout, &outlen) < 0) return -1;
        iconv_close(cd);
        return 1;
}

int main()
{

  char inbuf[CONV_BUF_LEN];
  char outbuf[CONV_BUF_LEN];

  strcpy(inbuf,"你好";

  if(gb2312_to_unicode(inbuf,outbuf) >; 0) {printf("unicode=";outbin(outbuf);}
    else printf("fail:%s!\n",inbuf);
  return 1;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP