在c中处理utf 8
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
看代码
size_t utf_length(u_char *p, size_t n) // u_char*p 指向一个可能包含utf-8的字符串,n = strlen(p)
{
u_char c;
size_t len;
u_int32_t i;
for (len = 0, i = 0; i < n; len++, i++) {
c = p[i];
if (c < 0x80) { // 0x80 的2进制度(10000000),单字节的时候,最大的编码是(01111111), 也就是127,也就是ascii
continue;
}
if (c >= 0xc0) { //根据utf-8的第2条规则, 如果是2个字节编码成一个符号的时候,那么应该是(110*****,10******)
/*如果是3个字节编码成一个符号, 那么应该是(1110****,10******,10******)
如果是4个字节编码成一个符号, 那么应该是(11110***,10******, 10******,10******)
for (c <<= 1; c & 0x80; c <<= 1) {
/*for的用法,第一个代表赋初始值, 第2个判断, 第3个赋值, 第2次循环的时候,第一个c<<1 已经不用了 */
&nbs
相关文档:
#include <Windows.h>
#include <math.h>
#include "resource.h"
#define PI 3.1415976/180
int dwCenterX,dwCenterY,dwRadius;
const TCHAR *szAppName=TEXT("Clock");
LRESULT CALLBACK ProcWinMain(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
void ShowTime(HWND hwnd,HDC hdc);
void ......
在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:
1、基于C的文件操作;
2、基于C++的文件操作;
3、基于WINAPI的文件操作;
4、基于BCB库的文件操作;
5、特殊文件的操作。
壹、基于C的文件操作
在ANSI C中 ......
转载自: http://bbs.chinaitlab.com/thread-304041-1-1.html
学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通。如何以最小的代价学习并精通C语言是本文的主题。请注意,即使是“最小的代价”,也绝不是什么捷径,而是以最短的时间取得最多的收获,同时也意味着你需要经历艰苦的过程。
一、要读 ......