在使用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 = MultiByteToWidlnfcceChar(CP_UTF8, 0, psrc, -1, NULL, 0); if(ret<=0){ *ppdst = NULL; return 0; } pws = (wchar_t*)malloc(ret*2); if(!pws){ *ppdst = NULL; &http://www.devze.comnbsp; 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); &开发者_MsSqlnbsp; *ppdst = NULL; return 0;&编程客栈nbsp; } if(WideCharToMultiByte(CP_ACP, 0, pws, -1, pgb, ret2, NULL, NULL)){ *ppdst = pgb; free(pws); return 1; }else{*ppdst = 0; free(pgb); free(pws); &n编程客栈bsp; return 0; }}by: 女孩不哭
精彩评论