c 语言里如何将int换成wstring,C/C++:关于std::string与std::wstring的转换

本文详细介绍了在C++中如何使用MultiByteToWideChar()和WideCharToMultiByte()进行std::string与std::wstring之间的转换,包括获取字符长度、内存分配和赋值的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(环境:Win7 64位, C++ builder 2010)

C/C++中一般会使用到std::string,但是很少用到std::wstring,一旦使用到就会涉及多字节和宽字节的相互转换。

这里使用到的API为MultiByteToWideChar()和WideCharToMultiByte(),处理时,一般先获取字符长度,然后再根据长度申请内存,最后赋值。示例代码如下:

#include 

#include 

bool String2WString(const std::string &strSrc, std::wstring &strDest)

{

strDest.clear();

if (strSrc.empty())

{

return true;

}

bool bResult = false;

int iLen = MultiByteToWideChar(CP_ACP, 0, strSrc.c_str(), strSrc.length(), NULL, NULL);

if (iLen == 0)

{

return bResult;

}

wchar_t *pszWBuffer = new wchar_t[iLen + 1];

int iSize = (iLen + 1) * sizeof(wchar_t);

memset(pszWBuffer, 0, iSize);

iLen = MultiByteToWideChar(CP_ACP, 0, strSrc.c_str(), strSrc.length(), pszWBuffer, iSize);

if (iLen != 0)

{

strDest = pszWBuffer;

bResult = true;

}

delete [] pszWBuffer;

pszWBuffer = NULL;

return bResult;

}

bool WString2String(const std::wstring &strSrc, std::string &strDest)

{

strDest.clear();

if (strSrc.empty())

{

return true;

}

bool bResult = false;

int iLen = WideCharToMultiByte(CP_ACP, 0, strSrc.c_str(), strSrc.length(), NULL, 0, NULL, NULL);

if (iLen == 0)

{

return bResult;

}

char *pszBuffer = new char[iLen + 1];

memset(pszBuffer, 0, iLen + 1);

iLen = WideCharToMultiByte(CP_ACP, 0, strSrc.c_str(), strSrc.length(), pszBuffer, iLen + 1, NULL, NULL);

if (iLen != 0)

{

strDest = pszBuffer;

bResult = true;

}

delete pszBuffer;

pszBuffer = NULL;

return bResult;

}

int _tmain(int argc, _TCHAR* argv[])

{

std::string strData("你好 世界");

std::wstring strValue = L"";

String2WString(strData, strValue);

strValue = L"世界 你好";

WString2String(strValue, strData);

system("pause");

return 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值