在使用Sqlite3时必须要用到的
使用方法:
char* src = "...";//待转换的ANSI或UTF8字符串 char* dst = NULL;//保存由函数内部分配的内存指针,不需要传入内存缓冲区的
转换为UTF-8:to_utf8(src,&dst); 转换为ANSI:to_gb(src,&dst);
返回值:零 - 失败,非零 - 成功. 注意:如果操作成功,需要手动释放函数内部分配的空间:
复制代码 代码如下: if(dst) { free(dst); dst = NULL; }
代码:
复制代码 代码如下: #include <windows.h> #include <stdio.h>int to_utf8(char* psrc,char** ppdst) { int ret,ret2; wchar_t* pws = NULL; char* putf = NULL;
ret = MultiByteToWideChar(CP_ACP,psrc,-1,NULL,0); if(ret<=0){ *ppdst = NULL; return 0; } pws = (wchar_t*)malloc(ret*2); if(!pws){ *ppdst = NULL; return 0; } MultiByteToWideChar(CP_ACP,pws,ret); ret2 = WideCharToMultiByte(CP_UTF8,NULL); if(ret2<=0){ free(pws); return 0; } putf = (char*)malloc(ret2); if(!putf){ free(pws); return 0; } if(WideCharToMultiByte(CP_UTF8,ret,putf,ret2,NULL)){ *ppdst = putf; free(pws); return 1; }else{ free(pws); free(putf); *ppdst = NULL; return 0; } }
int to_gb(char* psrc,ret2; wchar_t* pws = NULL; char* pgb = NULL; ret = MultiByteToWideChar(CP_UTF8,0); if(ret<=0){ *ppdst = NULL; return 0; } pws = (wchar_t*)malloc(ret*2); if(!pws){ *ppdst = NULL; return 0; } MultiByteToWideChar(CP_UTF8,ret); ret2 = WideCharToMultiByte(CP_ACP,NULL); if(ret2<=0){ free(pws); return 0; } pgb = (char*)malloc(ret2); if(!pgb){ free(pws); *ppdst = NULL; return 0; } if(WideCharToMultiByte(CP_ACP,pgb,NULL)){ *ppdst = pgb; free(pws); return 1; }else{*ppdst = 0; free(pgb); free(pws); return 0; } }
by: 女孩不哭 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|