问题标签 [wchar-t]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4556 浏览

c++ - static_cast wchar_t* 到 int* 或 short* - 为什么它是非法的?

在 Microsoft VC2005 和 g++ 编译器中,以下导致错误:

在 win32 VC2005 上:sizeof(wchar_t) 为 2

结果是

在 Mac OS X 或 Linux g++ 上:sizeof(wchar_t) 为 4

结果是

当然,我总是可以使用reinterpret_cast。但是,我想了解为什么编译器认为将 static_cast 转换为适当的整数类型是非法的。我敢肯定有一个很好的理由...

0 投票
4 回答
8879 浏览

c++ - C++,WCHAR[] 到 std::cout 和比较

我需要将 WCHAR[] 放入 std::cout ...它是从 Native Wifi API 回调传递的 PWLAN_CONNECTION_NOTIFICATION_DATA 的一部分。

我尝试了简单的 std::cout << var; 但它会打印出第一个字符的数字地址。比较 ( var == L"some text") 也不起作用。调试器返回预期值,但比较返回 0。如何将此数组转换为标准字符串(std::string)?

提前致谢

0 投票
4 回答
3030 浏览

c++ - 在 Windows 终端中输出 unicode 字符

在过去的一周里,我一直在和一个朋友一起用 C++ 开发一个roguelike游戏。主要也是学习语言。

我正在使用:

  • 诅咒
  • Windows 7的
  • 视觉工作室 C++

wchar_t在控制台中我想输出的任何地方。我已经成功地输出了一些 unicode 字符,例如 \u263B (☻),但其他字符,例如 \u2638 (☸),最终只会变成问号 (?)。

这是我用于输出的相关代码。

我当然可以依靠无聊的 ANSI 字符。但是拥有完整的 unicode 字符集可以玩真的很棒。

总结一下:如何确保正确输出 unicode 字符?


编辑:

好的,所以我发现我的编码工作正常。问题是我需要强制终端切换到更丰富的 unicode 字体。有没有跨平台的方法来做到这一点?甚至有Windows特定的方法来做到这一点吗?

0 投票
1 回答
3784 浏览

gcc - 如何使 String 到 const wchar_t* 转换函数在 Windows 和 Linux 下工作

我从事为 MSVCC / Windows 编写的项目,我必须移植到 GCC / Linux。该项目有自己的字符串类,它将其数据存储在来自 Qt 的 QString 中。为了转换为 wchar_t*,最初有这种方法(适用于 Windows):

因为 unicode() 返回一个 QChar (它是 16 位长),这在 Windows 下工作,因为 wchar_t 在那里是 16 位,但现在使用 GCC wchar_t 是 32 位长,所以它不再工作了。我试图用这个来解决这个问题:

这样做的问题是,当这个函数返回时,对象不再存在,所以这也不起作用。我认为解决这个问题的唯一方法是:

  1. 不要使用 String::c_str() 并直接调用 .toStdString().c_str()
  2. 让 GCC 将 wchar_t 视为 16 位类型

可能性一对我来说意味着几个小时的不必要的工作,我不知道可能性二是否可能。我的问题是,如何最好地解决这个问题?我会很感激任何有用的建议。谢谢你。

0 投票
5 回答
904 浏览

c++ - .c_str() 怪异?无缘无故地更改数据?

我有这个简单的功能:

在该函数的第二行,我有正确的 wchar_t*。但是,当我返回时,数据会切换为垃圾数据。中间没有函数。是什么赋予了?!

0 投票
3 回答
6007 浏览

c++ - 如何使用 C 预处理器将连接的字符串转换为宽字符?

我正在做一个项目,我有许多由连接(数字等)形成的常量字符串。

例如,我有一个LOCATION宏,它可以格式化__FILE____LINE__转换成一个字符串,当打印消息或错误时,我可以使用它来了解我在代码中的位置:

所以,这将格式化一个像“file.cpp(42)”这样的位置。问题是当我尝试将结果转换为宽字符串时:

这适用于 GCC,并导致 L"file.cpp(42)" 被插入到我的代码中。但是,在使用 MSVC++(使用 Visual C++ 2008 Express)尝试此操作时,出现错误:

我知道L前缀只会添加到我的表达式中的第一个术语。我也试过这个:

哪个“有效”,但给出的字符串L"\"file.cpp\" \"(\" \"42\" \")\""显然不是很方便(也不是我想要的),特别是考虑到这个宏与其他宏相比很简单。

所以,我的问题是:我怎样才能让它应用于 MSVC++ 中的整个表达式,这样我才能得到与 GCC 相同的结果?我宁愿不创建具有全范围标记的第二个字符串,因为我必须为每个宏维护两个宏,这不是很方便并且可能导致错误。另外,我还需要每个字符串的窄版本,所以不幸的是,使用全宽字符串也不是一种选择。

0 投票
6 回答
15241 浏览

c++ - wchar_t 只是 unsigned short 的 typedef 吗?

例如,是否:

翻译成:

0 投票
2 回答
330 浏览

c++ - C++:有没有什么好的方法来读/写而不在函数名中明确说明字符类型?(cout 与 wcout 等)

我在让程序从基于模板的文件中读取时遇到问题,例如:

当我用 实例化这个类时,这将起作用<char>,但是当我使用<wchar_t>(显然)时会出现问题。

在课堂之外,我正在使用:

要写入此数据结构(它是 a map<basic_string<T>, int>)中的所有信息,并且正如预测的那样,如果iter->first不是char数组,则 cout 会爆炸。

我在网上查看过,共识是使用 wcout,但不幸的是,由于该程序要求可以在编译时更改模板(<char>-> <wchar_t>)我不确定如何简单地选择 cout 或 wcout。也就是说,除非有办法在不更改大量代码的情况下读取/写入宽字符。

如果这个解释听起来很复杂,请告诉我,我会尽我所能解决它。

0 投票
7 回答
90442 浏览

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

例子:

此代码仅打印地址等十六进制值。如何打印 wchar_t 字符串?

0 投票
4 回答
4761 浏览

iphone - 如何将 wchar_t 复制到 NSString 中?

我正在使用 stringWithFormat @"%ls" 来做这件事,我只看到第一个字符被复制,这让我觉得它仍然假设它是一个单字节字符。

有任何想法吗?