C++如何把string类型的字符串负值给wchar_t?求完整实例。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++如何把string类型的字符串负值给wchar_t?求完整实例。相关的知识,希望对你有一定的参考价值。
请说清楚要包含什么头文件或其他什么条件
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
参考技术A 这里有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的. 参考技术B 是赋值给wchar_t数组吧?
这是一种宽字符格式,利用strcpu(char* dest,const char* source)的话是不行的,因为宽字符跟UNICODE的存储模式不同,如果直接这样操作的话,只会讲第一个数组元素复制完成,因为UNICODE是双自己存储的,每一个字母是16为,在char类型的后面都填充00,会认为是字符串的结束符\0.所以有两种方法,
要么是一个一个元素复制,利用循环,
要么利用宽字符拷贝函数wstrcpy(wchar_t,wchar_t) 参考技术C std::string是字符串,wchar_t是宽字符,没有办法直接赋值。
std::string可以通过windows的API函数MultiByteToWideChar()转换成std::wstring,也就是宽字符串,然后可以提取相应的宽字符。 参考技术D 用我的方法最简单了:
string str="this is a string";
wchar_t sz[100];
swprintf_s(sz,100,L"%S",str.c_str());
这里要注意%S是大写字母S
c++ 怎么把CHAR转STRING呢
例如
char c1="abcde";
string str;
那么怎么把c1转成string类型呢?
类型的空对象就可以了,但是不能进行类型转化哦,下面是做法
char
a=“a';
string
bb(a);
或者string
bb('a');
这样也是可以的
string
bb;
b=‘a';
还有什么问题再问,谢谢 参考技术A 你的写法有错误,
char类型只能有一个字符的。。
char *c1 = "abcde";
char c1 = 'a';
见以下:
#include<iostream>
using namespace std;
void main()
char *c1="abcde";
string str;
str = c1;
cout<<str.c_str()<<endl;
本回答被提问者采纳 参考技术B string都是用""号括起来的, c1其实就是字符数组,这就是字符数组与其他类型数组的区别,ABCDE就是个字符串,只不过是保存在c1这个变量之中了,要是还不明白就仔细的看书去吧,书中的细节都很重要的,仔细的去品味对于以后的学习收获会很大很大的. 参考技术C 你的题目本身就有问题,char型只能存一个字符,但是可以用char指针存储字符串,直接用等号赋值给string就行了 参考技术D
先定义一个string型变量str;
然后将char型值赋给str;
string str;char ch = 's' ;
str = s;
以上是关于C++如何把string类型的字符串负值给wchar_t?求完整实例。的主要内容,如果未能解决你的问题,请参考以下文章