草庐IT

c++ - wchar_t *到char *的转换问题

我对wchar_t*到char*转换有问题。我从wchar_t*WinAPI函数返回的FILE_NOTIFY_INFORMATION结构中获取了ReadDirectoryChangesW字符串,因此我认为该字符串是正确的。假设wchar字符串是“NewTextFile.txt”在VisualStudio调试器中,将鼠标悬停在变量中时会显示“N”和一些未知的中文字母。虽然在watch中字符串正确显示。当我尝试使用wcstombs将wchar转换为char时wcstombs(pfileName,pwfileName,fileInfo.FileNameLength);它仅将两个字母转换为ch

C++ , winapi 比较两个 WCHAR * 字符串

我想比较两个WCHAR*字符串。怎么做?附言我想在比较时忽略大小写。我知道您可以使用strcmpi但它不适用于WCHAR*。 最佳答案 对于区分大小写的比较,请查看wcscmp不区分大小写的比较,看_wcsicmp 关于C++,winapi比较两个WCHAR*字符串,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7245411/

c++ - 我尝试使用 wchar_t、char16_t 和 char32_t 类型打印汉字,但无济于事。

我正在尝试使用wchar_t、char16_t和char32_t类型打印汉字中,没有成功(liveexample)#includeintmain(){charx[]="中";//ChinesecharacterwithunicodepointU+4E2Dchary[]=u8"中";wchar_tz=L'中';char16_tb=u'\u4e2d';char32_ta=U'\U00004e2d';std::cout 最佳答案 由于您在Linux系统上运行测试,源代码是UTF-8,这就是为什么x和y是一样的东西。这些字节被std::co

c++ - 使用 -fshort-wchar 的含义

在MacOSX系统上浏览文件wchar.h时,我发现当__cplusplust未定义且wchar_t的最大大小为2个字节(通过使用编译器选项-fshort-wchar)。对于C程序来说,如果定义了-fshort-wchar,似乎是不允许使用这样的函数的。我想知道当使用-fshort-wchar时使用wchar_t函数意味着什么?您可能想知道为什么我需要使用-fshort-wchar。因为,我正在移植一个最初为Windows编写的应用程序,其中wchar_t的大小是两个字节。保存在wchar_t字符串中的数据被写入文件并在两个应用程序之间交换。在不同平台上处理wchar_t可变性的好方法

c++ - char* 到 const wchar_t * 转换

我需要将字符指针转换为w_char*以便使用ParseNetworkString()。我已经尝试自己寻找解决方案,虽然我找到了一种解决方案,但有一个问题阻止我使用它:b1naryatr0phy在另一个帖子中说:std::wstringname(L"SteveNash");constwchar_t*szName=name.c_str();这几乎对我有用,除了我不能直接传递字符串,因为它的值并不总是相同,这意味着我不能只把它放在引号中。如果我用函数调用替换参数,那么第一行会给我一个错误(例如:std::wstringname(LgetIpAddress());我试过std::wstring

c++ - 将 utf8 (char*) 转换为 wchar_t 的一个文件库?

我正在使用libjson这太棒了。我遇到的唯一问题是我需要将utf8字符串(char*)转换为宽字符字符串(wchar_t*)。我用谷歌搜索并尝试了3个不同的库,但它们都失败了(由于缺少header)。我不需要任何花哨的东西。只是一种单向转换。我该怎么做? 最佳答案 如果您使用的是Windows(考虑到您需要wchar_t,您很可能是Windows),请使用MultiByteToWideChar函数(在windows.h中声明),如下所示:intlength=MultiByteToWideChar(CP_UTF8,0,src,src

c++ - 使用 '?' 而不是 L' 有什么缺点吗?用wchar_t?

使用'?'风格的字rune字来比较或分配已知类型为wchar_t的值而不是使用有什么缺点吗code>L'?'风格的文字? 最佳答案 他们有错误的数据类型和编码,所以这是个坏主意。编译器将使用标准整数转换(例如符号扩展)静默地加宽字rune字(对于字符串,您会得到类型不匹配的编译错误)。但该值可能不匹配。例如,字符0x80到0xff通常映射到不同的Unicode代码点,具体映射因编译器的代码页而异。显然,Unicode不可能使用身份转换映射所有不同的代码页。如果仅仅扩大就足够了,就不需要像mbtowcs这样的函数了。WRT关于'\xA

c++ - 是否有任何 C 或 C++ 编译器不将 wctrans_t 和 wctype_t 定义为类型 wchar_t 的原因?

实际上,我正在比较编程语言之间的数据类型,这是我在阅读C和C++标准时遇到的问题。引用自C11,wctrans_tisascalartypethatcanholdvalueswhichrepresentlocale-specificcharactermappingswctype_tisascalartypethatcanholdvalueswhichrepresentlocale-specificcharacterclassifications短语ascalartype表示C11不限制wctrans_t和wctype_t为特定标量类型。我的MinGWGCC4.8实现了wctrans_t

c++ - 使用 UTF-8 时应该使用 wchar_t 吗?

UTF-8可以编码为1、2和最多4个字节。我系统上的单个char是1个字节。我是否应该使用wchar_t作为预防措施,以便我能够适应任意UTF-8编码字符? 最佳答案 不,你不应该!Unicode4.0标准(ISO10646:2003)指出:Thewidthofwchar_tiscompiler-specificandcanbeassmallas8bits.Consequently,programsthatneedtobeportableacrossanyCorC++compilershouldnotusewchar_tforsto

c++ - std::stringstream 如何处理 operator<< 中的 wchar_t*?

鉴于以下代码段无法编译:std::stringstreamss;ss我也不认为这个会:std::stringstreamss;ss但确实如此(至少在VC++上)。我猜这是由于以下ostream::operator过载:ostream&operator如果我不小心混合了字符类型,这是否有可能悄悄地破坏我的代码? 最佳答案 是的-您需要wstringstream用于wchar_t输出。您可以通过不使用字符串文字来缓解这种情况。如您所述,如果您尝试将constwstring&传递给stringstream,它将无法编译。