2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > c语言char转wchar t c语言char和wchar_t 转换

c语言char转wchar t c语言char和wchar_t 转换

时间:2021-12-17 07:32:38

相关推荐

c语言char转wchar t c语言char和wchar_t 转换

最近遇到一个在C语言当中处理中文的问题,因为汉字和ascii不同,汉字是多字节编码方式,ascii只用一个字节表示,所以在用c语言提供的strlen函数得到的长度是字节长度; 以下都是utf-8编码方式,为了得到一个字符(汉字和ascii)有几种处理方式:

1. 自己写程序判断是否为汉字,通过第一个字节判断,以下是我写的一部分代码;

int isHanzi(int a) { int t = a & 0xE0; if(t==0xE0){ printf("汉字1/n"); return 3; } t = a & 0xC0; if(t==0xC0){ return 2; } t = a & 0xF0; if(t==0xF0){ return 4; } t = a & 0xF8; if(t==0xF8){ return 5; } t = a & 0xFC; if(t==0xFC){ return 2; } printf("不是/n"); return 1; }

2. 用内置的wchar_t类型 ,

1). wchar_t ws[]=L"北京bus";

这样用wcslen(ws)结果就为 5,

int i; setlocale(LC_ALL, "zh_CN.UTF-8"); int len=wcslen(ws); for(i=0; i这是必须设置 本地编码方式 setlocale(LC_ALL,"zh_CN.UTF-8");

2).读一个文件后得到的数据,要使数据为wchar_t ,就需要进行字符串转换了.用到函数 mbstowcs,以下是我写的一个读文本文 件然后转换的程序

//读一个文本文件 FILE *fp = fopen("/home/wyt/data.txt","r"); char buffer[1024]; size_t realLen=0,curLen,length=2048; char *data=(char *)malloc(sizeof(char)*length); char *tmp; while(!feof(fp)){ curLen = fread(buffer,sizeof(char),1024,fp); realLen+=curLen; if(length<=realLen){ tmp = (char *)malloc(sizeof(char)*(length+2048)); memcpy(tmp,data,sizeof(char)*length); length+=2048; free(data); data=tmp; } strcat(data,buffer); } data[realLen]='/0'; printf("%s",data); fclose(fp); wchar_t *data2 = (wchar_t *)malloc(sizeof(wchar_t)*length); //转换成wchar_t类型 mbstowcs(data2,data,length); size_t ln=wcslen(data2); for(i=0;i如果 wchar_t 转换为char 类型,可以用函数 wcstombs

void out(wchar_t name) { if(name<128){ char n[2]; wcstombs(n,&name,sizeof(wchar_t)); n[1]='/0'; printf("%lc,%s,%d/n",name,n,strlen(n)); }else{ char n[3]; wcstombs(n,&name,sizeof(wchar_t)); n[3]='/0'; printf("%lc,%s,%d/n",name,n,strlen(n)); } //n[3]='/0'; }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。