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 ...
随机推荐
- Ubuntu+Django+mod_wsgi+Apache配置过程
Ubuntu15.10 Apache2.4( sudo apt-get install apache2 ) Python3.4( sudo apt-get install apache2 ), [系 ...
- java类的初始化
转载:http://blog.csdn.net/moreevan/article/details/6968718 我们知道一个类(class)要被使用必须经过装载,连接,初始化这样的过程.下面先对这三 ...
- mysql出现Can't connect to MySQL server on 'localhost' (10061)的解决方法
网上搜索的一: 今天把mysql数据库拷贝到另外一台机上,结果连不上,报“Can't connect to MySQL server on 'localhost' (10061)“错误 到网上sear ...
- 只能在执行 Render() 的过程中调用 RegisterForEventValidation
当用GridView导出Execl的时候,会发生只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误提示.有两种方法可以解决以上问题: 1.修改web ...
- JVM调优总结-调优方法
JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪 JProfiler ...
- svn revert
本地开发环境出现一个问题,用revert完美解决. 问题描述: 文件static/image/common/jiqiaodaren.png已经被提交到svn上,但是我的开发环境因未与svn同步,所以没 ...
- watch命令
watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...
- fp oo
http://blog.enfranchisedmind.com/2009/05/scala-not-functional/
- js监听键盘方向键事件
<SCRIPT language=javascript> document.onkeydown = chang_page; function chang_page() { || ) loc ...
- Spring 与 mybatis整合 Error parsing Mapper XML. Cause: java.lang.NullPointerException
mapper配置文件中的namespace没有填:而且namespase的值应该填为:mapper的权限定名:否则还是会抛出异常 org.springframework.beans.factory.B ...