C++ Builder string相互转换(转)
源:http://www.cnblogs.com/zhcncn/archive/2013/05/20/3089084.html
1. char*->string
(1)直接转换
const char* nodename;
string temp = nodename;
string temp2(nodename);
2. wchar_t*->wstring
(1)直接转换
const wchar_t* nodename;
wstring temp = nodename;
wstring temp2(nodename);
3. string->char*
wstring->char*
方法一:
(1)将wstring.c_str()转为wchar_t*
方法二:
(1)将string.c_str(), wstring.c_str()转为AnsiString(http://blog.csdn.net/bannico/article/details/7577728),
(2)将AnsiString.c_str()转为char*
方法一:
string temp;
const char* nodename = temp.c_str();
方法二:
struct IPAddress{
std::wstring hostname;
std::vector<std::wstring> ips;
}; scripting::IPAddress dns = (*pPreloadDns)[i];
AnsiString strA = dns.hostname.c_str();
char * hn = strA.c_str();
但据说这样很不可靠(http://bbs.csdn.net/topics/30479944),安全的做法是:
方法三: String str="123456";
int len=str.Length();
char *cp=new char[len+1];
StrPCopy(cp, str);
4. wstring->wchar_t*
string->w_char*(参见5)
方法一:
(1)将wstring.c_str()转为wchar_t*
方法二.一:
(1)将wstring.c_str()转为UnicodeString
(2)将UnicodeString.c_str()转为wchar_t*
方法二.二:
(1)将wstring.c_str()转为AnsiString
(2)使用ANSIToUnicode方法将AnsiString.c_str()转为wchar_t*
方法一:
wstring temp;
wchar_t* nodename = temp.c_str();
方法二.一:
struct IPAddress{
std::wstring hostname;
std::vector<std::wstring> ips;
}; scripting::IPAddress dns = (*pPreloadDns)[i];
UnicodeString strA = dns.hostname.c_str();
//char * hn = strA.c_str();
wchar_t * hn = strA.c_str(); 方法二.二:
struct IPAddress{
std::wstring hostname;
std::vector<std::wstring> ips;
}; scripting::IPAddress dns = (*pPreloadDns)[i];
AnsiString strA = dns.hostname.c_str();
//char * hn = strA.c_str();
wchar_t * hn = ANSIToUnicode(strA.c_str());
5. char*->UnicodeString->wstring, wchar_t*
(1)将char*转为UnicodeString
(2)将UnicodeString.c_str()转为wstring, wchar_t*
UnicodeString temp(inet_ntoa(pAddr->sin_addr)) ; //inet_ntoa returns char* std::wstring addr(temp.c_str()); wchar_t* addr2 = temp.c_str(); log_debug(_T("set connection ip:") << addr); con->setIP(addr);
6. wchar_t*->AnsiString->string, char*
(1)将wchar_t*转为AnsiString
(2)将AnsiString.c_str()转为string, char*
wchar_t* str = wstring.c_str(); AnsiString temp(str ) ; //inet_ntoa returns char*
std::string addr(temp.c_str()); char* addr2 = temp.c_str(); log_debug(_T("set connection ip:") << addr); con->setIP(addr);
下面关于string,wstring互转的方法是错误的。对ansi字符可能能得到正确结果,但如果传入的参数是“中文”字符串,将得不到正确的结果。
7. string->wstring
static wstring Str2Wstr (string str )
{
if (str.length() == )
return L""; std::wstring wstr;
wstr.assign (str.begin(), str.end());
return wstr;
}
8. wstring->string
static string Wstr2Str(wstring wstr )
{
if (wstr.length() == )
return ""; std::string str;
str.assign (wstr.begin(), wstr.end());
return str;
}
正确的做法是使用MultiByteToWideChar和WideCharToMultiByte:
9. string->wstring
std::wstring stringToWstring(const std::string& str)
{
LPCSTR pszSrc = str.c_str();
int nLen = MultiByteToWideChar(CP_ACP, , pszSrc, -, NULL, );
if (nLen == )
return std::wstring(L""); wchar_t* pwszDst = new wchar_t[nLen];
if (!pwszDst)
return std::wstring(L""); MultiByteToWideChar(CP_ACP, , pszSrc, -, pwszDst, nLen);
std::wstring wstr(pwszDst);
delete[] pwszDst;
pwszDst = NULL; return wstr;
}
10. wstring->string
std::string wstringToString(const std::wstring& wstr)
{
LPCWSTR pwszSrc = wstr.c_str();
int nLen = WideCharToMultiByte(CP_ACP, , pwszSrc, -, NULL, , NULL, NULL);
if (nLen == )
return std::string(""); char* pszDst = new char[nLen];
if (!pszDst)
return std::string(""); WideCharToMultiByte(CP_ACP, , pwszSrc, -, pszDst, nLen, NULL, NULL);
std::string str(pszDst);
delete[] pszDst;
pszDst = NULL; return str;
}
测试代码:
int _tmain(int argc, _TCHAR* argv[])
{
std::string str = "中文";
std::wstring wstr = L"中文";
std::string str1 = "";
std::wstring wstr1 = L"";
LPCSTR pSrc = "中文";
LPCWSTR pwzSrc = L"中文"; stringToWstring(str);
wstringToString(wstr);
stringToWstring(str1);
wstringToString(wstr1);
stringToWstring(pSrc);
wstringToString(pwzSrc); return ;
}
C++ Builder string相互转换(转)的更多相关文章
- c#中 uint--byte[]--char[]--string相互转换汇总
原文:c#中 uint--byte[]--char[]--string相互转换汇总 在在做一些互操作的时候往往需要一些类型的相互转换,比如用c#访问win32api的时候往往需要向api中传入DWOR ...
- java中的BigDecimal和String的相互转换,int和String的类型转换,Integer类和String相互转换
一: /*由数字字符串构造BigDecimal的方法 *设置BigDecimal的小数位数的方法 */ 注:BigDecimal在数据库中存的是number类型. import java.math.B ...
- json对象与string相互转换教程
一.说明 1.1 背景说明 json对象与string相互转换,这东西想写了很多次,但总觉得网上教程比较成熟,所以之前每次都放弃了.但今天又被string转json对象折腾了半天,实在受不了,所以还是 ...
- 实战c++中的string系列--std:vector 和std:string相互转换(vector to stringstream)
string.vector 互转 string 转 vector vector vcBuf;string stBuf("Hello DaMao!!!");----- ...
- golang []byte 和 string相互转换
原文链接:golang []byte和string相互转换 测试例子 package main import ( "fmt" ) func main() { str2 := &qu ...
- Java基础:String类详解,案例用户登录实现,案例手机号截取实现,案例敏感词替换实现;StringBuilder类详解,StringBuilder和String相互转换,附练习案例.
1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...
- xml string 相互转换
一.使用最原始的javax.xml.parsers,标准的jdk api // 字符串转XMLString xmlStr = /"....../";StringReader sr ...
- C++Builder String 转 char* (转)
源:http://blog.csdn.net/bannico/article/details/7577728 使用C++ Builder 处理字符串经常会遇到兼容性问题. 这次要将String 类型 ...
- java - Integer、int 、String相互转换总结
一下子还真记不清这三种数据类型之间的转换方法,所以做个小笔记. public class Test03 { public static void main(String[] args) { //int ...
随机推荐
- maven下载,安装与eclipse中maven配置
1.maven下载.安装与环境变量配置 http://blog.csdn.net/jiuqiyuliang/article/details/45390313 2.Eclipse中maven的配置 ht ...
- Struts2--课程笔记1
第一个Struts程序: 在开发Struts程序之前,首先要导入额外的jar包,基本需求的是14个jar包,关于14个ja包是什么,有什么作用,此处不讲述. 还要配置web.xml文件,注册Strut ...
- A. Mike and Cellphone(Round 361 Div.2)
写一半去开程序的时候不小心关了网页,LOFTER我都不奢望加入代码高亮,最起码我关闭的时候弹个对话框,再不济也给我定时保存一下草稿吧. A. Mike and Cellphone time limit ...
- 简单的setInterval应用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JS获取网页中HTML元素的几种方法分析
getElementById getElementsByName getElementsByTagName 大概介绍 getElementById ,getElementsByName ,getEle ...
- hdu_4714_Tree2cycle(树形DP)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意:给你N个点N-1条边,形成一个树,让你拆树,并连接成一个环,每拆一次,连接一次,消耗1,问 ...
- Stsadm 导入导出子站点
SharePoint通过stsadm备份和还原子网站(不是网站集) 大家都知道SharePoint的stsadm命令提供了很多便捷甚至是唯一的操作方法! 这里列出的所有命令:http://www. ...
- DefaultHttpClient is deprecated 【Api 弃用]】
最近在使用Apache的httpclient的时候,maven引用了最新版本4.3,发现Idea提示DefaultHttpClient等常用的类已经不推荐使用了,之前在使用4.2.3版本的时候,还没有 ...
- abstract class 和 interface区别
相同点: 1.都不能被直接实例化,都可以通过继承实现其抽象方法: 不同点: 1.接口支持多继承,抽象类只能由一个父类: 2.接口只能定义行为,抽象类既可以定义行为,又可以提供实现: 3.接口只包含方法 ...
- Django urls常用匹配语法
url from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', vi ...