草庐IT

c++ - wchar_t 和 char16_t 在 Windows 上是一样的吗?

我有一个std::u16string的实例,我可以将它的c_str()传递给需要LPCWSTR的Win32API,而无需任何类型的转换?例如,我可以安全地这样做吗:autou16s=std::u16string(u"Hello");::SetWindowTextW(hWnd,reinterpret_cast(u16s.c_str()));已更新,MSDN说herewchar_t是UTF-16LE,而char16_t只是没有指定字节序的UTF-16。那么可以安全地假设char16_t在Windows上也始终是UTF-16LE吗?或者那是特定于MSVC编译器的,因此如果我使用GCC编译,它

c++ - 将 float 转换为 wchar_t win32

令我震惊的是,无论如何我都找不到将float转换为wchar_t的方法,或者我找错了地方!floatcNumbers[9]={1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0};floatx=3.0;floattemp=0.0;wchar_tdata[]={0};for(inti=0;i(temp);if(isInt){data=temp;//thisisabigfailaddToList(hWnd,data);}}voidaddToList(HWNDhWnd,constwchar_t*data){SendMessage(GetDlgItem(hWnd,IDC_L

c++ - 如何将 wchar_t* 转换为 long C++

正如标题所示,我需要知道在VisualC++中将wchar_t*转换为long的最佳方法。有可能这样做吗?如果可能,该怎么做? 最佳答案 使用_wtol()将宽字符串转换为长字符串。wchar_t*str=L"123";longlng=_wtol(str); 关于c++-如何将wchar_t*转换为longC++,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32006796/

c++ - C++ Windows/Mac/iOS 中的西类牙字符

我在iOS应用程序中显示西类牙文字符时遇到一些问题。有问题的代码都是C++,并且在Windows应用程序和iOS应用程序之间共享。使用VisualStudio2010在Windows中编译(字符集为多字节)。并在Mac上使用Xcode4.2编译。目前,代码正在使用char指针,我的第一个想法是我需要切换到wchar_t指针。但是,我注意到我想要输出的西类牙文字符在Windows中仅使用字符指针就可以正常显示。这让我觉得这些字符是多字节字符集的一部分,在我准备好进行一些日语、俄语、阿拉伯语等翻译之前,我不需要费心将所有内容更新为wchar_t.不幸的是,虽然西类牙字符确实在Windows

java - 通过 JNI 将双字节 (WCHAR) 字符串从 C++ 传递到 Java

我有一个Java应用程序,它通过JNI使用C++DLL。DLL的一些方法采用字符串参数,其中一些方法返回也包含字符串的对象。目前DLL不支持Unicode,所以字符串处理比较简单:Java调用String.getBytes()并将生成的数组传递给DLL,DLL将数据简单地视为char*。DLL使用NewStringUTF()从constchar*创建jstring。我现在正在修改DLL以支持Unicode,切换到使用TCHAR类型(当定义UNICODE时使用Windows的WCHAR数据类型)。修改DLL进行得很顺利,但我不确定如何修改代码的JNI部分。我现在唯一能想到的是:Java调

c++ - 如何将 wchar_t 值打印到控制台?

例子:#includeusingnamespacestd;intmain(){wchar_ten[]=L"Hello";wchar_tru[]=L"Привет";//Russianlanguagecout此代码仅打印地址等十六进制值。如何打印wchar_t字符串? 最佳答案 编辑:如果您尝试编写无法在您的默认语言环境中表示的文本,这将不起作用。:-(使用std::wcout而不是std::cout。wcout 关于c++-如何将wchar_t值打印到控制台?,我们在StackOverf

c++ - wchar_t 与 unsigned short 冲突

我正在将我们的库更新到较新的版本,但遇到了编译错误:ClassName&ReturnClass::FuncName(wchar_t*,size_t)':memberfunctionalreadydefinedordeclared然而它之前是这样定义的:ClassName&ReturnClass::FuncName(unsignedshort*,size_t)'我们将wchar_t作为unsignedshort的typedef,这似乎是导致问题的原因。我曾尝试使用编译器选项wchar_t,但是当它看到typedef时,会导致库中出现大量错误。我正在使用nmake在Windows和MSDE

c++ - 将 long 转换为 wchar_t *

感谢阅读。我认为我在这方面已经很接近了,但我可以利用一些专业知识来理解为什么我对某事的尝试没有按照我期望的方式进行。我(目前)需要的是将long类型(LONG,因为我实际上是在VC++中,但我知道这只是一个typedef)转换为wchar_t*。我能够获得我想要的结果,但我无法理解为什么我认为应该起作用的方法……不起作用。这是实现我想要的结果的代码:conststd::wstringmyString{std::to_wstring(wRect.bottom)};constwchar_t*myCharPointer{myString.c_str()};与我想采用的方法相比:constwc

c++ - 模板和字符串文字和 UNICODE

新:感谢所有帮助过我的人!答案标在下面,我在下面(q.v.)的问题中用一个功能版本扩展了答案:我似乎经常遇到这种情况(在更新我们的字符串实用程序库时):我需要一种方法来获得一个适用于char和wchar_t的模板,它使用各种字符串文字。目前我发现这具有挑战性,因为我不知道如何使用编译时方法将字符串文字更改为窄字符或宽字符。作为考虑,采用以下基于TCHAR的函数://quotethegivenstringin-placeusingthegivenquotecharacterinlinevoidMakeQuoted(CString&str,TCHARchQuote=_T('"')){if(

c++ - Poco::Path 使用 const wchar_t* 编译但行为异常

使用Poco::Path我发现了一个非常奇怪的错误。见以下代码:#include#include#includeintmain(){std::wstringa_path=L"c:\\temp";//Poco::Pathfrom_wstring(a_path);//ERROR:failstocompile,expectedPoco::Pathfrom_wchar_t(a_path.c_str());//compiles...unexpectedstd::cout但上面程序的输出是(在Windows中):\而不是预期的:c:\temp查看Poco::Path文档,我看不到构造函数期望std