C/C++中,GB2312转Unicode
嵌入到多个系统编程时常常出现编码问题,特别是中文,并且对于国标GB2312来说,不像UTF-8那样可以用算法直接转为unicode(传说是这么说的,我也没试过),所以GB到Unicode只能是一对一的转换。
以前碰到过GB转为Unicode的难题,在网上找到了源码,我只是修改了一下查找的代码,将查找算法改为二分查找。
主要函数为:
unsigned int gb_uni(unsigned int gb_idx); // 传入一个汉字所对应的gb2312编码,返回该汉字的Unicode编码
GB编码简单分析:
比如“我”字的gb编码为0xCED2,unicode编码为0x6211,那么0x6211==gb_uni(0xCED2),在windows的文档里面,小于0x0a1,都是ansii编码,GB2312中每个汉字用双字节标识,比如“我”字,gb码为上位编码为0xFFFFFF62和下位编码为0xFFFFFF11,组合后为0x6211,所以一般分析中英文档,逐个字符判断,小于0x0a1则为ansii,大于,则为汉字的开始,需要预读取下一个字符来合成一个汉字的编码。
源代码
在这里(点击超链接即可):
在vim下
输入:set fdm=marker,查看会比较舒服
C/C++ GB2312转为Unicode的源码
相关文档:
Regarding C Run-Time Error R6034 for VS2005/VS2008
Regarding "C Run-Time Error R6034"
Microsoft's recommendation is very confusing. That is, it recommends to include a manifest file and to re-compile the project.
I recently had a problem with 'R6034' error message even with a manifest file ......
常见问题:
编译失败,报错如下“无法解析的外部符号 _WSACleanup@0”等。
原因是没有引用winsock.h所在的库--Ws2_32.lib。
这时只要添加一行代码
#pragma comment( lib, "Ws2_32.lib")
即可。 ......
C/C++头文件一览 收藏
C/C++头文件一览
C、传统 C++
#include <assert.h> //设定插入点
#include <ctype.h> //字符处理
#include <errno.h> //定义错误码
#include <float.h> //浮点数处理
#include <fstream.h> //文件输入/输出
#i ......
B/S C/S 优缺点比较 及 适应场合
首先来说B/S和C/S两种软件体系结构。
B/S 是Browser/Server指浏览器和服务器端,在客户机端不用装专门的软件,只要一个浏览器即可(瘦客户端)
C/S 是Client/Server指客户机和服务器,在客户机端必须装客户端软件及相应环境后,才能访问服务器(胖客户端)
......