草庐IT

c++ - 如何将 char 字符串转换为 wchar_t 字符串?

我有一个char*格式的字符串,想将其转换为wchar_t*,以传递给Windows函数。 最佳答案 这个小功能有帮助吗?#includeintmbstowcs(wchar_t*out,constchar*in,size_tsize);另见C++reference 关于c++-如何将char字符串转换为wchar_t字符串?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1791

c++ - 找不到“wchar.h”文件

我知道这个问题:macOS'wchar.h'FileNotFound但这对我没有帮助。我试过重新安装xcode,重新安装命令行工具,重新启动系统。wchar.h文件已就位,但编译器无法找到它。我还能尝试什么?也许它与sysroot相关?有什么办法可以解决这个问题吗?macbooks-MacBook-Pro:Rackeuphorbium$sudomakec++-Iinclude-Idep/include-Idep/lib/libzip/include-DVERSION=dev-MMD-O3-march=core2-ffast-math-g-Wall-DARCH_MAC-isysroot/

C++ - 将 wchar_t 转换为网络字节并返回

主要原因是因为我通过套接字发送Unicode数据(字节,而不是字符),并且我想确保字节顺序匹配,因为wchar_t是UTF16。接收程序也是我的另一个,所以我会知道它是UTF16并能够做出相应的react。这是我目前使用的算法,但结果很奇怪。(这是在同一个应用程序中,因为我想在发送之前学习如何转换它)caseWM_CREATE:{//ConvertStringtoNetworkBytewchar_tData[]=L"Thisisastring";char*DataA=(char*)Data;unsignedshortuData=htons((unsignedint)DataA);//C

c - Linux 上 UTF-16 的 wchar_t?

在Linux上使用wchar_t*存储UTF-16编码的文本是否有意义?明显的问题是wchar_t在Linux上是四个字节,而UTF-16通常每个字符需要两个(或有时两组两个)字节。我正在尝试使用完全可以做到这一点的第三方库,但它看起来很困惑。看起来事情搞砸了,因为在Windows上wchar_t是两个字节,但我只是想仔细检查一下,因为它是一个非常昂贵的商业图书馆,可能我只是不明白。 最佳答案 虽然可以将UTF-16存储在wchar_t中,但此类wchar_t值(或用作字符串的数组)不适合与任何标准一起使用采用wchar_t或指向w

c++ - 如何在 Linux 中打开包含非 Ascii 字符串的 wchar_t* 文件?

环境:Gcc/G++Linux我在文件系统中有一个非ASCII文件,我要打开它。现在我有一个wchar_t*,但我不知道如何打开它。(我信任的fopen只打开char*文件)请帮忙。非常感谢。 最佳答案 有两种可能的答案:如果您想确保所有Unicode文件名都可表示,您可以硬编码文件系统使用UTF-8文件名的假设。这是“现代”Linux桌面应用程序方法。只需将字符串从wchar_t(UTF-32)转换为带有库函数的UTF-8(iconv可以很好地工作)或您自己的实现(但要查找规范,这样您就不会不要像Shelwien那样把它搞得一团糟

c++ - 在 Linux 中是否有将 wstring 或 wchar_t* 转换为 UTF-8 的内置函数?

我想将wstring转为UTF-8编码,但又想使用Linux自带的函数。在Linux中是否有任何内置函数可以通过简单调用将wstring或wchar_t*转换为UTF-8?例子:wstringstr=L"file_name.txt";wstringmode="a";fopen([FUNCTION](str),[FUNCTION](mode));//Simpleinvoke.cout 最佳答案 如果/当您的编译器支持足够的C++11时,您可以使用wstring_convert#include#include#includeintmai

c - 将 wchar 打印到 Linux 控制台?

我的C程序贴在下面。在bash中,程序打印“charis”,Ω未打印。我的语言环境都是en_US.utf8。#include#include#includeintmain(){intr;wchar_tmyChar1=L'Ω';r=wprintf(L"charis%c\n",myChar1);} 最佳答案 这很有趣。显然,编译器将omega从UTF-8转换为UNICODE,但libc以某种方式将其搞砸了。首先:%c格式说明符需要一个char(即使在wprintf版本中)所以您必须指定%lc(因此%ls用于字符串)。其次,如果您像这样运

c++ - 为什么允许使用空的 wchar_t 文字?

看下面的代码:intmain(intargc,char*argv[]){//Thisworks:(DisableLangExt=*Yes*(/Za))wchar_twc0=L'\0';wchar_twc_=L'';assert(wc0==wc_);//Thisdoesn'tcompile(VC++2010):charc0='\0';charc_='';//errorC2137:emptycharacterconstantassert(c0==c_);return0;}为什么编译器允许为宽字符定义一个空字符文字?这对wide没有意义,就像编译器标记错误的char没有意义一样。标准是否允许

java - 如何将 jstring 转换为 wchar_t *

假设在C++端,我的函数采用类型为jstring的变量,名为myString。我可以将其转换为ANSI字符串,如下所示:constchar*ansiString=env->GetStringUTFChars(myString,0);有没有办法获得constwchar_t*unicodeString=... 最佳答案 如果这对某人有帮助...我已将此功能用于Android项目:std::wstringJava_To_WStr(JNIEnv*env,jstringstring){std::wstringvalue;constjchar*

c++ - 用于检测将 wchar_t* 传递给 BSTR 的静态代码分析

由于BSTR只是wchar_t*的typedef我们的代码库有几个(很多?)字符串文字被传递到的地方一个需要BSTR的方法,这可能会混淆编码器或任何尝试使用任何BSTR特定方法(例如SysStringLen)的人。有没有办法静态检测这种类型的滥用?我尝试使用VC10/Wall和静态代码分析MicrosoftAllRules进行编译,但没有得到以下违规代码由他们中的任何一个标记。voidfoo(BSTRstr){std::cout更新:在尝试破坏wtypes.h以检测这些类型的违规行为后,我放弃了。我尝试了两条路径,我都必须使用上面的示例程序,但是一旦我尝试了一个真正的项目,它们就失败了