佚名通过本文主要向大家介绍了海思平台,华为海思平台,海思平台开发,iconv函数,php iconv函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:海思平台使用iconv函数直接段错误!!!!!
描述:

使用平台为HI3535
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <iconv.h>
static int CodeConvert(const char *from_charset,const char *to_charset,const char *inbuf,size_t inlen, char *outbuf,size_t outlen)
{
iconv_t cd;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if (cd == 0)
return 1;
memset(outbuf,0,outlen);
printf ("Test0\n");
if (iconv(cd,(pin),&inlen,pout,&outlen) < 0 )
return 1;
printf ("Test1\n");
iconv_close(cd);
return 0;
}
int gb2312toutf8(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen)
{
printf ("sourcebuf : %s\n", sourcebuf);
printf ("sourcelen : %d\n", sourcelen);
printf ("destlen : %d\n", destlen);
return CodeConvert("gb2312","utf-8",sourcebuf,sourcelen,destbuf,destlen);
}
int main(int args, char *argv[])
{
char ptr[2048] = {0};
strcpy(ptr, "84123481234");
char dest[2048] = {0};
size_t inlen = strlen(ptr) + 1;
size_t outlen = strlen(ptr) + 3;
int ret = gb2312toutf8(ptr, inlen, dest, outlen);
if (ret)
printf ("err\n");
printf ("so : %s\n", ptr);
printf ("dest : %s\n", dest);
}
编译:
arm-hisiv100nptl-linux-gcc iconv.c -o iconv
执行结果:
# ./iconv
sourcebuf : 84123481234
sourcelen : 12
destlen : 14
Test0
Segmentation fault
描述:
海思字符转码iocnv嵌入式utf-8
下面贴出测试代码,主要是实现OSD显示功能,功能大部分都实现了,就是这个字符转码不通过,这段代码是TI8127平台上能跑过的代码,但不知道为什么海思平台上无法运行,是不是有什么特殊的操作我没有做,拜托各位大神指点一下!!!!
使用平台为HI3535
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <iconv.h>
static int CodeConvert(const char *from_charset,const char *to_charset,const char *inbuf,size_t inlen, char *outbuf,size_t outlen)
{
iconv_t cd;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if (cd == 0)
return 1;
memset(outbuf,0,outlen);
printf ("Test0\n");
if (iconv(cd,(pin),&inlen,pout,&outlen) < 0 )
return 1;
printf ("Test1\n");
iconv_close(cd);
return 0;
}
int gb2312toutf8(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen)
{
printf ("sourcebuf : %s\n", sourcebuf);
printf ("sourcelen : %d\n", sourcelen);
printf ("destlen : %d\n", destlen);
return CodeConvert("gb2312","utf-8",sourcebuf,sourcelen,destbuf,destlen);
}
int main(int args, char *argv[])
{
char ptr[2048] = {0};
strcpy(ptr, "84123481234");
char dest[2048] = {0};
size_t inlen = strlen(ptr) + 1;
size_t outlen = strlen(ptr) + 3;
int ret = gb2312toutf8(ptr, inlen, dest, outlen);
if (ret)
printf ("err\n");
printf ("so : %s\n", ptr);
printf ("dest : %s\n", dest);
}
编译:
arm-hisiv100nptl-linux-gcc iconv.c -o iconv
执行结果:
# ./iconv
sourcebuf : 84123481234
sourcelen : 12
destlen : 14
Test0
Segmentation fault