C++如何把string类型的字符串负值给wchar_t?求完整实例。 30

请说清楚要包含什么头文件或其他什么条件... 请说清楚要包含什么头文件或其他什么条件 展开
 我来答
jdergon
2012-05-05 · TA获得超过225个赞
知道小有建树答主
回答量:316
采纳率:0%
帮助的人:142万
展开全部
1.string 中存放到是 char。它是个可变长度。即中文专2个字节。英文专1个字节。
而wchar_t 是定长的。不管是否是中文还是英语都用2个字节存放。
简单一点就用 _bstr_t 这个类吧。它重载来 const char* 和const wchar_t *.

如:
string test = "中国人abc"
_bstr_t a(test.c_str());
const wchar_t * = a;
你可以看看_bstr_t类到帮组。
追问
请问_bstr_t类需要包含什么头文件?我编译失败。
追答
#include   
archmageee4
2015-11-25 · TA获得超过1517个赞
知道大有可为答主
回答量:1581
采纳率:78%
帮助的人:928万
展开全部
这里有2个的现成的函数:

std::wstring MBytesToU16(const char* lpcszString)
{
int len = strlen(lpcszString);
int unicodeLen = MultiByteToWideChar(GBKCP, 0, lpcszString, -1, NULL, 0);
wchar_t* pUnicode = new wchar_t[unicodeLen + 2];
memset(pUnicode, 0, (unicodeLen + 2) * sizeof(wchar_t));
MultiByteToWideChar(GBKCP, 0, lpcszString, -1, (LPWSTR)pUnicode, unicodeLen);
wstring wString = (wchar_t*)pUnicode;

delete [] pUnicode;
return wString;
}

std::wstring UTF8ToU16(const char* lpcszString)
{
int len = strlen(lpcszString);
int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, lpcszString, -1, NULL, 0);
wchar_t* pUnicode;
pUnicode = new wchar_t[unicodeLen + 2];
memset((void*)pUnicode, 0, (unicodeLen + 2) * sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0, lpcszString, -1, (LPWSTR)pUnicode, unicodeLen);
wstring wstrReturn(pUnicode);
delete [] pUnicode;
//wprintf(L"U82U16 [%s]",wstrReturn.c_str());
return wstrReturn;
}
因为不知道你遇到的问题中的string中的字符串是什么编码的.所以这两个函数,第一个是GBK转Unicode ,第二个是Utf8转Unicode的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zssureqh
2012-05-05 · TA获得超过351个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:277万
展开全部
是赋值给wchar_t数组吧?
这是一种宽字符格式,利用strcpu(char* dest,const char* source)的话是不行的,因为宽字符跟UNICODE的存储模式不同,如果直接这样操作的话,只会讲第一个数组元素复制完成,因为UNICODE是双自己存储的,每一个字母是16为,在char类型的后面都填充00,会认为是字符串的结束符\0.所以有两种方法,
要么是一个一个元素复制,利用循环,
要么利用宽字符拷贝函数wstrcpy(wchar_t,wchar_t)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chichujn
2015-11-26 · TA获得超过663个赞
知道小有建树答主
回答量:1534
采纳率:50%
帮助的人:1106万
展开全部
std::string是字符串,wchar_t是宽字符,没有办法直接赋值。
std::string可以通过windows的API函数MultiByteToWideChar()转换成std::wstring,也就是宽字符串,然后可以提取相应的宽字符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
iPCfan
推荐于2016-04-13 · 超过17用户采纳过TA的回答
知道答主
回答量:60
采纳率:100%
帮助的人:34.2万
展开全部
用我的方法最简单了:

string str="this is a string";
wchar_t sz[100];
swprintf_s(sz,100,L"%S",str.c_str());

这里要注意%S是大写字母S
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式