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的,我想把程序中的一些输出值转换成中文正常输出,求方法

参考技术A MultiByteToWideChar需要先求出需要转换的字符的长度,你的方法是对的,但是不完整,你在网上再搜搜吧。

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 &lt;String&gt;,这个特定的文件减少了读取为的错误

错误 C2678: 二进制 '!=' : 未定义运算符,它采用 () 'class std::basic_string,class std::allocator >' 类型的左操作数 (或没有可接受的转换)

我在 VS2006 中仍然面临的其他主要错误是

线路:str.append(to_string((long double)(value)));

错误:error C2065: 'to_string' : undeclared identifier

线路:vector &lt;vector &lt;float&gt;&gt; distOfSectionPoint, momentAtSectionPoint, preFinalMoment, finalMoments, momentAtSectionPtOnPtLoadProfile ;

错误:error C2208: 'class std::vector' : no members defined using this type

谁能解释 Visual C++ 2006 出了什么问题??

【问题讨论】:

向我们展示,至少是发生错误的行。没有任何代码也说不清楚。 您标记了这个“vc6”,它早于 2006 年发布。您确定您使用的是您认为的版本吗? #include &lt;String&gt; 中没有包含在VS2010 中的#include &lt;String&gt; 是什么?此外,将&lt;&gt; 用于标准标题(如vectorstring 等) @KirilKirov:我尝试使用 错误并没有减少,请查看编辑 【参考方案1】:

假设 to_stringstd::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 的错误是由两个右尖括号引起的,较早的编译器会将其解释为单个&gt;&gt; 标记。在它们之间添加一个空格:

vector<vector<float> >
                    ^

不清楚您使用的是哪个编译器,因为没有 Visual C++ 2006。如果您实际上是指 Visual C++ 6.0(从 1998 年开始),那么您可能注定要失败。从那时起,有两次主要的语言修订,使得编写该编译器和现代编译器都支持的代码变得非常困难。如果您指的是 2005 年或 2008 年,请注意避免使用 C++11 功能。

【讨论】:

我已经添加了行,出现错误的地方,请看编辑 @vin:您需要在两个 &gt; 括号之间添加一个空格,以便该代码与旧编译器一起使用。【参考方案2】: 错误 C2065:“to_string”:未声明的标识符

std::to_string() 是 VS2010 支持的 C++11 特性。任何早期版本的 Microsoft 编译器都不支持它。另一个选择是boost::lexical_cast


错误 C2208:“类 std::vector”:没有使用此类型定义的成员

C++11 和 VS2010 允许使用 &gt;&gt;,但 C++11 之前的版本不允许。需要更改为:

vector <vector <float> > distOfSectionPoint,
                    //^ space here

【讨论】:

@vin,我已经完成了。或者,如果您无法选择提升,请参阅 Mike Seymour 的建议。

以上是关于C++程序中,MultiByteToWideChar的使用问题 ,下面的是一个简单的实现,但是转换不了UNICODE编码的主要内容,如果未能解决你的问题,请参考以下文章

将 Java 嵌入到 C++ 应用程序中?

将 Java 嵌入到 C++ 应用程序中?

C++应用程序性能优化——C++对象模型

将数据从 Python 程序发送到 C++ 程序的策略

从 C++ 程序在 Linux 中运行另一个程序

在 Python GUI 中嵌入 C++ 程序