在使用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, 0, 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, 0, psrc, -1, pws, ret); ret2 = WideCharToMultiByte(CP_UTF8, 0, pws, -1, NULL, 0, NULL, NULL); if(ret2<=0){ free(pws); return 0; } putf = (char*)malloc(ret2); if(!putf){ free(pws); return 0; } if(WideCharToMultiByte(CP_UTF8, 0, pws, ret, putf, ret2, NULL, NULL)){ *ppdst = putf; free(pws); return 1; }else{ free(pws); free(putf); *ppdst = NULL; return 0; } } int to_gb(char* psrc, char** ppdst){ int ret, ret2; wchar_t* pws = NULL; char* pgb = NULL; ret = MultiByteToWideChar(CP_UTF8, 0, 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_UTF8, 0, psrc, -1, pws, ret); ret2 = WideCharToMultiByte(CP_ACP, 0, pws, -1, NULL, 0, NULL, NULL); if(ret2<=0){ free(pws); return 0; } pgb = (char*)malloc(ret2); if(!pgb){ free(pws); *ppdst = NULL; return 0; } if(WideCharToMultiByte(CP_ACP, 0, pws, -1, pgb, ret2, NULL, NULL)){ *ppdst = pgb; free(pws); return 1; }else{*ppdst = 0; free(pgb); free(pws); return 0; } }
© 版权声明
本文刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等部门来源于互联网,版权均归原作者所有!本网站提供的内容服务于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
联系信息:邮箱aoxolcom@163.com或见网站底部。
联系信息:邮箱aoxolcom@163.com或见网站底部。
THE END
请登录后发表评论
注册
社交帐号登录