wxString和char*互转, find, substring

1.wxString转char*

const char* cs = wxStr.mb_str(wxConvUTF8);

2.char* 转 wxString

wxString mystring(dataPtr, wxConvUTF8);

3.find函数

   都没有空格的情况下

 {"errcode":0,"errmsg":"ok","access_token": "accesstoken000001","expires_in":7200}

loc = mystring.First("\"errmsg\":");

返回13, 也就是从0开始数, 第13个字符是"errormsg" 的第一个字符.

4.SubString

想获取"errcode":后面的字符串, 可以截取

"errorcode:0" 第一次出现的位置是1;用1+本身字符串的长度. 就是后面字符串的起点. 

明确一点SubString, 第一个参数是截取后保留字符串的第一个字符的位置, 后面的参数是总字符串的长度, 也就是保留字符串最后一个字符的位置+1;

tmp = mystring.SubString(1+10, mystring.Length());

5.字符串编码

我所理解的编码, 每个字符串有独一无二的编码比如中文"你好",  在utf-8的时候存储的是表中的序号"序号utf-8", 在ascii文件中存储的是"序号ascii".  当前文件想知道这是什么字. 他手里只有序号. 当拿着"序号utf-8" 去ascii表中去找对应的文字, 那么就显示乱码了.  只有拿到正确的"你好". 再送给下家进行操作的时候, 下家才知道这个"你好", 在它当前需要的表中对应的序号是什么.  序号+编码确定一个字符的显示

例如: 在ascii文件中的汉字. 读取出来, char * 中存储的就是多字节, 或者unicode类型. 想转到utf-8怎么办

wxString uriWithPara.sprintf("%s", data);//可取出多字节或者unicode

//转成utf-8

char* utf8Msg = UnicodeToUtf8(m_weixinMsg.wchar_str());

char* MainFrm::UnicodeToUtf8(const wchar_t* unicode)
{
    int len;
    len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, NULL, 0, NULL, NULL);
    char *szUtf8 = (char*)malloc(len + 1);
    memset(szUtf8, 0, len + 1);
    WideCharToMultiByte(CP_UTF8, 0, unicode, -1, szUtf8, len, NULL, NULL);
    return szUtf8;
}

用完不要释放里面传出来的指针哦!

所以涉及到实质的转码, 是要重新开辟空间的, 毕竟存储的大小也不一样了. 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值