草庐IT

c++ - 冲突 : definition of wchar_t string in C++ standard and Windows implementation?

Fromc++20032.13Awidestringliteralhastype“arrayofnconstwchar_t”andhasstaticstorageduration,wherenisthesizeofthestringasdefinedbelowThesizeofawidestringliteralisthetotalnumberofescapesequences,universal-character-names,andothercharacters,plusonefortheterminatingL’\0’.Fromc++0x2.14.5Awidestringlite

c# - 如何将 wchar_t* 从 C++ 编码到 C# 作为输出参数或返回值?

我试过很多方法,但没有一个奏效。有人对此有正确的例子吗?我只想将wchar_t*值从函数移动到C#级别。 最佳答案 这并不像您想象的那么难……wchar_t*是什么?该类型通常代表什么值?一个字符串。它等同于windows.h中定义的LPWSTR类型。因此,您将其编码为string类型。但是,由于它是一个out参数(或返回值),您需要使用StringBuilderclass在C#端,而不是string类型。P/Invoke语法看起来像这样:[DllImport("MyLib.dll")]publicstaticexternvoidM

c++ - wchar_t 数据是否需要字节序转换?

在C/C++中,如果一个多字节宽字符(wchar_t)值从大端系统传输到小端系统(反之亦然),它是否会在另一个系统上产生相同的值边?还是需要交换字节? 最佳答案 是的,你需要交换它们。字节将按照它们被放入的相同顺序从传输中检索。只是在另一端,这些字节的顺序具有不同的含义。因此,您需要将它们转换为正确的字节序(这是一个词吗?)。行之有效的方法是在传输之前转换为网络字节顺序。然后在收到时转换回主机特定的字节顺序(从网络字节顺序)。一组帮助字节序转换的函数:ntohsConverta16-bitquantityfromnetworkbyt

c++ - char* 和 wchar_t* 的区别

我是MFC新手。我正在尝试做简单的mfc应用程序,但我在某些地方感到困惑。例如,SetWindowText有两个api,SetWindowTextA,SetWindowTextW一个api接受char*,另一个接受wchar_t*.char*和wchar_t*有什么用? 最佳答案 char用于所谓的ANSI函数系列(通常函数名称以A结尾),或者更常见的是使用ASCII字符集。wchar_t用于新的所谓的Unicode(或Wide)函数系列(通常函数名称以W结尾),它们使用UTF-16字符集。它与UCS-2非常相似,但又不完全相同。如

c++ - 为什么 char 既没有符号也没有符号,而 wchar_t 是?

下面的C++程序编译没有错误:voidf(char){}voidf(signedchar){}voidf(unsignedchar){}intmain(){}同一程序的wchar_t版本不会:voidf(wchar_t){}voidf(signedwchar_t){}voidf(unsignedwchar_t){}intmain(){}错误:‘voidf(wchar_t)’的重新定义voidf(signedwchar_t){}wchar_t似乎是unsigned。为什么重载会出现不一致? 最佳答案 char都是不同的类型,可以重载[

c++ - 您可以在编译时将 __func__ 转换为 wchar_t[] 吗?

所以我有这段代码wchar_tfuncName[]=__FUNCTIONW__;但是__FUNCTIONW__的问题是它的名称中包含类信息,而我只需要函数名称。现在__FUNCTIONW__只调用了_CRT_WIDE(__FUNCTION__)这让我觉得我可以调用_CRT_WIDE(__func__)但这给出了一个错误“identifierL__func__isundefined"__func__是一个隐式声明的标识符,当它在函数内部使用时,它会扩展为包含函数名称的字符数组变量。它是在C99中添加到C中的。来自C99§6.4.2.2/1:Theidentifier__func__isi

c++ - 覆盖 ctype<wchar_t>

我正在编写一个lambda演算解释器来娱乐和练习。我通过添加ctype让iostreams正确标记标识符将标点符号定义为空格的方面:structtoken_ctype:ctype{maskt[table_size];token_ctype():ctype(t){for(size_ttx=0;tx(classic_table()可能会更干净,但在OSX上不起作用!)然后在我点击标识符时交换facet:localetoken_loc(in.getloc(),newtoken_ctype);…localeconst&oldloc=in.imbue(token_loc);in.unget()>

c++ - 使用 libc++ 输出 wchar_t

#include#includeintmain(){std::locale::global(std::locale("en_US.utf8"));std::wcout这在libstdc++(gcc和clang)中按预期工作,但在libc++中仅打印第一个字符(碰巧是ASCII)。我在GentooLinux上使用libcxx-0.0_p20140322。这是libc++中的一个已知错误,还是只是我不知道如何cooking它?更新1.我试过了std::locale::global(std::locale("en_US.utf8"));std::locale::global(std::loc

c++ - 如何声明 wchar_t 并稍后设置其字符串值?

我正在为Windows开发,我没有找到关于如何正确声明和稍后设置unicode字符串的足够信息。到目前为止,wchar_tmyString[1024]=L"MyTestUnicodeString!";我假设上面所做的是[1024]是分配的字符串长度,我需要在该字符串中包含最多的字符数。L""确保引号中的字符串是unicode(我发现的一个alt是_T())。现在稍后在我的程序中,当我试图通过以下方式将该字符串设置为另一个值时,myString=L"Anothertext";我遇到编译器错误,我做错了什么?另外,如果有人有简单而深入的unicode应用程序资源,我想提供一些链接,这些链接

c++ - 将 wchar_t 转换为 int

如何将wchar_t('9')转换为int(9)?我有以下代码,用于检查peek是否为数字:if(iswdigit(peek)){//storepeekasnumeric}我可以只减去'0'还是有一些我应该担心的Unicode细节? 最佳答案 如果问题只涉及'9'(或罗马语之一数字),只需减去'0'就是正确的解决方案。如果您关心iswdigit返回的任何内容非零,但是,问题可能要复杂得多。这标准说iswdigit返回一个非零值,如果它参数是“十进制数字宽字符代码[在当前本地]”。这是模糊的,并由语言环境决定准确定义是什么意思。在“C