23,116
社区成员
发帖
与我相关
我的任务
分享
#include <iconv.h>
#include <iostream>
using namespace std;
int main()
{
char *x=new char [5],*y=new char [20];
for(int i=0;i!=5;++i)
x=("good")[i];
iconv_t cd =iconv_open("UCS-4","UTF-8");
size_t xx=5,yy=20;
cout<<iconv(cd,&x,&xx,&y,&yy)<<'\n';
iconv_close(cd);
if(xx!=0)return 0;
for(int i=0;i!=20-yy;++i)
cout<<(unsigned int)y[i]<<' ';
cout<<'\n';
delete [] x;
delete [] y;
return 0;
}
#include <iconv.h>
#include <iostream>
#include <errno.h>
using namespace std;
void xprintf(const void* data, int len)
{
char * ptr = (char*)data;
printf("\n");
for( int i = 0 ; i < len ; i++ ){
printf("[%3d:%2x] ", i,(unsigned char)(ptr[i]) );
if( (i+1)%10 == 0 ){
printf("\n");
}
}
printf("\n");
}
;
int main()
{
char tmpin[] = "GOOD!";
char tmpout[20];
char * in = tmpin;
char * out = tmpout;
memset( tmpout, 0, sizeof( tmpout ) );
iconv_t cd =iconv_open("UCS-2","ASCII");
if( cd == (iconv_t)(-1) ){
return 0;
}
size_t inbytesleft = strlen(in);
size_t outbytesleft = 20;
cout << "========= Before convert:===========" << endl;
cout << "inbytesleft:" << inbytesleft << endl;
cout << "outbytesleft:" << outbytesleft << endl;
cout << "in:" << endl << "------------------------" << endl;
xprintf( in, sizeof(tmpin) );
cout << "out:" << endl << "------------------------" << endl;
xprintf( out, sizeof(tmpout) );
cout<<"converted:"<<iconv(cd,&in,&inbytesleft,&out,&outbytesleft)<<'\n';
switch ( errno ){
case E2BIG:
cout << " There is not sufficient room at *outbuf." << endl;
break;
case EILSEQ:
cout << " An invalid multibyte sequence has been encountered in the input." << endl;
break;
case EINVAL:
cout << " An incomplete multibyte sequence has been encountered in the input." << endl;
break;
}
iconv_close(cd);
cout << endl << "=========== After convert:=========== " << endl;
cout << "inbytesleft:" << inbytesleft << endl;
cout << "outbytesleft:" << outbytesleft << endl;
cout << "in:" << endl << "------------------------" << endl;
xprintf( in, sizeof(tmpin) );
cout << "out:" << endl << "------------------------" << endl;
xprintf( out, sizeof(tmpout) );
cout << "tmpin:" << endl << "------------------------" << endl;
xprintf( tmpin, sizeof(tmpin) );
cout << "tmpout:" << endl << "------------------------" << endl;
xprintf( tmpout, sizeof(tmpout) );
return 0;
}
if(xx!=0)return 0;
for(int i=0;i!=20-yy;++i)
cout<<(unsigned int)y[i]<<' ';