最近遇到一个在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 转换相关推荐

  1. c语言wchar转化为char_c、c++ char*和wchar*互相转换

    1. 问题描述 编写程序时通常会面对一些不同的编码格式,如Unicode和multibytes.在有关字符串的处理时尤其重要,系统编程时通常会遇到很多这样的问题,例如把wchar*的字符串转换为cha ...

  2. C语言char*s 4,求讲解几道C语言的题 52 声明语句为“char s[4][15],*p1,**p2;int x,*y;”,下列语句中正...

    求讲解几道C语言的题 52 声明语句为"char s[4][15],*p1,**p2:int x,*y:",下列语句中正 2018-6-15来自ip:14.144.15.70的网友 ...

  3. c语言char数字转int补位,关于char强制转换成int到底是用0还是用1补位的猜想与检验...

    关于char强制转换成int到底是用0还是用1补位的猜想与检验 最近学C语言发现char强制转换时值会完全不同,而且变化很大,于是决定写代码测试一下. 先检验一下char型的-3和3在内存中分别怎么表 ...

  4. c语言中将整数转换成字符串_在C语言中将ASCII字符串(char [])转换为八进制字符串(char [])...

    c语言中将整数转换成字符串 Given an ASCII string (char[]) and we have to convert it into octal string (char[]) in ...

  5. C语言 main 函数参数 main(int argc, char *argv[]) - C语言零基础入门教程

    目录 一.main 函数写法 二.main 函数参数简介 三.使用 main 函数参数 1.打印 main 函数参数 a.直接运行 exe 文件 b.打开 cmd 命令行窗口执行 exe 文件 c.打 ...

  6. c语言中将整数转换成字符串_在C语言中将ASCII字符串(char [])转换为十六进制字符串(char [])...

    c语言中将整数转换成字符串 Given an ASCII string (char[]) and we have to convert it into Hexadecimal string (char ...

  7. C 语言实例 - 计算 int, float, double 和 char 字节大小

    C 语言实例 - 计算 int, float, double 和 char 字节大小C 语言实例 C 语言实例使用 sizeof 操作符计算int, float, double 和 char四种变量字 ...

  8. C语言——将数字和数字字符输入给char型变量会如何?

    C语言--将数字和数字字符输入给char型变量会如何 char型是字符型变量,而且其存储的内容往往是字符的ASCII码,那么如果将数字赋值给它会如何?与将数字字符赋值给它有何区别? 下面展示三种输入情 ...

  9. 【C语言经典面试题】这样的char * 定义怎么回事

    作者简介 *架构师李肯(全网同名)**,一个专注于嵌入式IoT领域的架构师.有着近10年的嵌入式一线开发经验,深耕IoT领域多年,熟知IoT领域的业务发展,深度掌握IoT领域的相关技术栈,包括但不限于 ...

最新文章

  1. qt练习11 鼠标,按键,滚轮事件学习
  2. 考研成绩查询系统(jsp、mysql、java)
  3. 关于构造与析构过程中调用虚函数的问题
  4. 【Demo 0011】多媒体播放器
  5. 树(5)-----判断两颗树一样或者一棵树是否是另外一颗的子树
  6. Remoting入门实例
  7. Windows Server 2012 将资源发布到 AD DS
  8. 语言技巧——scanf读入多行字符串
  9. 数据结构与算法分析—C语言描述 pdf
  10. Java面试题目(非通用模板)
  11. 《眼儿媚·愁云淡淡雨潇潇》
  12. C 语言 —— 命名规则
  13. Javafx中切换输入法
  14. 为什么要画ER图?有哪些画图规范?
  15. ADG备库mrp和rfs进程
  16. 物联网平台由哪些架构组成
  17. Jquery 中 ajaxSubmit使用讲解
  18. 山东大学软件学院项目实训-创新实训-网络安全靶场实验平台(十五)
  19. 在Linux终端命令行下播放音乐的命令
  20. Markdown笔记及常用快捷键(自用)

热门文章

  1. 2022-2028年中国氟硅橡胶产业发展动态及投资前景分析报告
  2. python系统问题
  3. LeetCode简单题之数组中第 K 个独一无二的字符串
  4. 4D毫米波雷达Radar
  5. TVM 图优化Graph Optimization
  6. 机器学习PAI产品架构
  7. Yolov3 的 OneFlow 实现
  8. Single Shot Multibox Detection (SSD)实战(下)
  9. 腾讯云https认证
  10. DCN-cs6200 DHCPv6配置