C++程序中,MultiByteToWideChar的使用问题 ,下面的是一个简单的实现,但是转换不了UNICODE编码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++程序中,MultiByteToWideChar的使用问题 ,下面的是一个简单的实现,但是转换不了UNICODE编码相关的知识,希望对你有一定的参考价值。
void main()
TCHAR unicodebuf[256];
MultiByteToWideChar( CP_ACP,
0,
"严",
1,
(unsigned short *)unicodebuf,
-1
);
cout<<*unicodebuf<<endl;//这里输出的数值,但是不是UNICODE码
system("pause");
;
各位高手,本人有一个库,但是不支持UNICODE的,我想把程序中的一些输出值转换成中文正常输出,求方法
C++ 程序在 VC++ 2010 中编译,但在 Visual C++ 6.0 中没有
【中文标题】C++ 程序在 VC++ 2010 中编译,但在 Visual C++ 6.0 中没有【英文标题】:C++ program gets compiled in VC++ 2010 but not in Visual C++ 6.0 【发布时间】:2012-08-28 11:31:56 【问题描述】:我不会粘贴整个程序,只粘贴包含的文件和错误,我很确定,错误本身就在那里!
VS 2010 中包含的文件
#include <cstdlib>
#include <windows.h>
#include "iostream"
#include "conio.h"
#include "vector"
#include "math.h"
#include <string.h>
#include <bitset>
Visual C++ 6.0 中包含的文件
#include <cstdlib>
#include <windows.h>
#include "iostream"
#include "conio.h"
#include "vector"
#include "math.h"
#include <string.h>
#include <bitset>
#include <String>
嗯,只有一个区别,我在 Visual C++ 2006 中添加了#include <String>
,这个特定的文件减少了读取为的错误
错误 C2678: 二进制 '!=' : 未定义运算符,它采用 () 'class std::basic_string,class std::allocator >' 类型的左操作数 (或没有可接受的转换)
我在 VS2006 中仍然面临的其他主要错误是
线路:str.append(to_string((long double)(value)));
错误:error C2065: 'to_string' : undeclared identifier
线路:vector <vector <float>> distOfSectionPoint, momentAtSectionPoint, preFinalMoment, finalMoments, momentAtSectionPtOnPtLoadProfile ;
错误:error C2208: 'class std::vector' : no members defined using this type
谁能解释 Visual C++ 2006 出了什么问题??
【问题讨论】:
向我们展示,至少是发生错误的行。没有任何代码也说不清楚。 您标记了这个“vc6”,它早于 2006 年发布。您确定您使用的是您认为的版本吗?#include <String>
中没有包含在VS2010
中的#include <String>
是什么?此外,将<>
用于标准标题(如vector
、string
等)
@KirilKirov:我尝试使用 错误并没有减少,请查看编辑
【参考方案1】:
假设 to_string
是 std::to_string
,那么这是一个 C++11 函数,在旧编译器中不可用。你可以拼凑一些大致相当的东西,比如
template <typename T>
std::string nonstd::to_string(T const & t)
std::ostringstream s;
s << t;
// For bonus points, add some error checking here
return s.str();
涉及vector
的错误是由两个右尖括号引起的,较早的编译器会将其解释为单个>>
标记。在它们之间添加一个空格:
vector<vector<float> >
^
不清楚您使用的是哪个编译器,因为没有 Visual C++ 2006。如果您实际上是指 Visual C++ 6.0(从 1998 年开始),那么您可能注定要失败。从那时起,有两次主要的语言修订,使得编写该编译器和现代编译器都支持的代码变得非常困难。如果您指的是 2005 年或 2008 年,请注意避免使用 C++11 功能。
【讨论】:
我已经添加了行,出现错误的地方,请看编辑 @vin:您需要在两个>
括号之间添加一个空格,以便该代码与旧编译器一起使用。【参考方案2】:
错误 C2065:“to_string”:未声明的标识符
std::to_string()
是 VS2010 支持的 C++11 特性。任何早期版本的 Microsoft 编译器都不支持它。另一个选择是boost::lexical_cast
。
错误 C2208:“类 std::vector”:没有使用此类型定义的成员
C++11 和 VS2010 允许使用 >>
,但 C++11 之前的版本不允许。需要更改为:
vector <vector <float> > distOfSectionPoint,
//^ space here
【讨论】:
@vin,我已经完成了。或者,如果您无法选择提升,请参阅 Mike Seymour 的建议。以上是关于C++程序中,MultiByteToWideChar的使用问题 ,下面的是一个简单的实现,但是转换不了UNICODE编码的主要内容,如果未能解决你的问题,请参考以下文章