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类型呢?

直接把他复制给一个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?求完整实例。的主要内容,如果未能解决你的问题,请参考以下文章

将字符串数组作为缓冲区传递给 C++ 到 C#

c++怎么把一个string复制给另一个string型啊

c++ 把string类型的h1,赋值给vector<string>类型的h2

(C++) CString转string 怎么转!!

关于C++中string类型变量的赋值

c++ 如何将string 转成 enum 类型,enum 转成 string类型,