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'; }
總結
以上是生活随笔為你收集整理的c语言char转wchar t,c语言char和wchar_t 转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “新年上庾楼”上一句是什么
- 下一篇: 求一个微信设置个性签名。