wchar_t* 转 char*问题,我郁闷一天了

来源:百度知道 编辑:UC知道 时间:2024/05/26 04:43:38
#include<iostream>
#include<fstream>
#include "windows.h"
#include "wchar.h"
#include <string>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

string ws2s(const wstring& ws)
{
string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
setlocale(LC_ALL, "chs");
const wchar_t* _Source = ws.c_str();
size_t _Dsize = 2 * ws.size() + 1;
char *_Dest = new char[_Dsize];
memset(_Dest,0,_Dsize);
wcstombs(_Dest,_Source,_Dsize);
string result = _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}

int main()
{
wifstream infile1("c:\\test.txt");
//test.txt的内容为 1 100 299 399 测试中文
//保存方式为asci
wstring line;
while(getline(infile1, line))
{

wifstream infile1("c:\\test.txt");
1. test为ascii保存的,infile1要设定代码页,否则infile1.size()==8
加上:
infile1.imbue(locale("chs"));

wstring line;
while(getline(infile1, line))
{
wcout<<line<<endl;
}

2. 第一次执行getline(infile1, line),line设为“测试中文”
因为是循环,第二次执行,line将重新设为“”
所以要适当的方法保存line

参考http://hi.baidu.com/jetqu2003/blog/item/cadf6d50e6b2a8648435243b.html