悬赏!字符编码转换,unicode转换为GB2312出现异常

悬赏!字符编码转换,unicode转换为GB2312出现错误
如题:

执行代码如下:


int code_convert(char *from_charset,char *to_charset,char *inbuf,char *outbuf,size_t outlen)
{
iconv_t cd;
int rc;
int inlen = strlen(inbuf);
char **pin = &inbuf;
char **pout = &outbuf;

if(inbuf == NULL || outbuf ==NULL || inlen == 0)
{
printf("return 1\r\n");
return -1;
}

cd = iconv_open(to_charset,from_charset);
if (cd==0) 
return -1;
memset(outbuf,0,outlen);

if (iconv(cd,pin,&inlen,pout,&outlen)==-1) 
return -1;
iconv_close(cd);
return 0;
}


int unicode_to_gb(char* src, char* dst, size_t outlen )
{
return code_convert("UNICODE","gb2312",src,dst,outlen);
}

int gb_to_unicode(char* src, char* dst, size_t outlen )
{
return code_convert("GB2312","UNICODE",src,dst,outlen);
}



int utf8_to_gb(char* src, char* dst, size_t outlen )
{
return code_convert("utf-8","GB2312",src,dst,outlen);
}

int gb_to_utf8(char* src, char* dst, size_t outlen )
{
return code_convert("GB2312","utf-8",src,dst,outlen);
}


int main()
{
unsigned char a[] = {0x4B ,0x6D ,0xD5 ,0x8B ,0x61,0x00,0x62,0x00,0x63,0x00};
unsigned char b[100];
int i;

unicode_to_gb(a,b,100);
for(i = 0;i < 20; i++)
{
printf("%02X ",b[i]);
}
return 0;
}


a中存放的是“测试abc”的unicode码,为什么在转码到字母的的时候,即遇到0x00就不能继续转下去了呢。如果我想转码 汉字和字母混杂的unicode字符串,要如何实现呢?
希望大神帮助~
在线等,急呀!
unicode gb2312 编码

------解决方案--------------------

#include <iconv.h>
#include <string.h>
#include <stdio.h>

int code_convert(char* from_charset, char* to_charset, char* inbuf, int inlen, char* outbuf, int outlen)
{
iconv_t cd;
int rc;
char** pin = &inbuf;
char** pout = &outbuf;

if((cd = iconv_open(to_charset, from_charset)) == 0)
return -1;
memset(outbuf, 0, outlen);
if(iconv(cd, pin, &inlen, pout, &outlen) == -1)
return -1;
iconv_close(cd);

return 0;
}

int unicode_to_gb2312(char* inbuf, int inlen, char* outbuf, int outlen)
{
return code_convert("UTF-16", "GB2312", inbuf, inlen, outbuf, outlen);
}
 
int main(void)
{
char a[] = {0x4B, 0x6D, 0xD5, 0x8B, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x00};
char b[100];
int i;
 
unicode_to_gb2312(a, 10, b, 100);
printf("%s\n", b);
for(i = 0; i < 20; i++)
         printf("0x%02x ", b[i] & 0xff);
printf("\n");

return 0;