- 论坛徽章:
- 0
|
求救:为什么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;
} |
|