问题标签 [char16-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.
c++11 - VS 2015 std::char_traits操作
在我的工作场所,我们在 VS 2015(更新 3)编译器升级后将std::wstring
字符串类型(包含国际化字符)更改为 from 。std::u16string
由于这个原因,我们看到了大量的性能回归,例如this。
分析器分析表明std::u16string
的std::char_traits<char16_t>
操作,如copy
、和是最受打击的compare
,并且比' 的对应操作花费的时间更长。find
assign
std::wstring
std::char_traits<wchar_t>
这些std::char_traits<wchar_t>
操作是用 来编写的,std::wmem*
而std::char_traits<char16_t>
操作是用 来编写的for loops
。
如果我们将char16_t
type (or std::u16string
) 的这些特征操作更改为使用我们自己定制的特征,我们会看到性能改进,性能与std::wstring
.
我们计划编写我们自己的自定义特征(直到 MS 为下一个版本的 VS 修复它)如下
这样可以吗?这种方法有什么问题吗?
unicode - char ~ char32_t 类型与 UTF-8 ~ UTF-32 有什么关系?
- char:8位字符类型
- char16_t:16 位字符类型
- char32_t:32 位字符类型
- wchar_t:16 ~ 32 位字符类型,取决于编译器
- UTF-8:一种可以表示Unicode字符同时保留8位字符的编码方式
- UTF-16:如何使用一个或两个 16 位值对 Unicode 字符进行编码
- UTF-32:如何将所有 Unicode 字符编码为 32 位
和上面一样,但不是很好理解。它是否只是将 UTF-8、UTF-16、UTF-32 实现为 char、char16_t、char32_t 类型?
c++ - 来自 libicu 的 u_snprintf_u 的性能问题
我正在将一些应用程序从用于 C 字符串的 wchar_t 移植到 C++11 提供的 char16_t。
虽然我有问题。我发现可以处理 char16_t 类型的 snprintf 的唯一库是 ICU 及其 UChar 类型。
u_snprintf_u(等效于 swprintf/snprintf,但以 Uchar 作为参数)的性能差强人意。
一些测试导致 u_snprintf_u 比 snprintf 慢 25 倍。
我在 valgrind 上得到的示例:
如您所见,底层代码正在做太多工作并实例化我不想要的内部对象。
编辑:我正在使用的数据不需要由底层 ICU 代码解释。它是面向ASCII的。我没有找到任何方法告诉 ICU 不要尝试在此类函数调用上应用语言环境等。
c++ - 使用用于 C++ 代码的标头编译 C 代码时未知类型名称 char16_t
这是我的头文件,
样本.h
这是我的 C 代码,
样本.c
上面的头文件最初只被 C++ 代码使用。现在我有一个 C 代码要编译,它使用相同的头文件。
当我使用 GCC 编译 C 代码时,出现以下错误,
我读了这个,看起来它并不是一个真正的错误。
我面临的问题是否有任何解决方法或解决方法?请建议。
regex - 我可以在 char16_t 字符串上使用 STL 正则表达式库吗?
简而言之,下面的代码有什么本质上的错误?
它与
更多信息:
c - 如何在 C 中使用 printf 和 scanf 处理 char16_t 或 char32_t?
如果我写:
它将产生输出“41 A”。我写的时候也一样
它将产生输出“1f34c L”而不是预期的“1f34c”!
这里有什么问题吗?如何将 char16_t 和 char32_t 字符打印到标准输出?
另外,我应该使用哪个格式说明符从 scanf 获取 char16_t / char32_t 输入?
这将产生输出“f0 �”。
char - Microsoft SAL - 警告 C28285:对于函数“function_name”,“注释”中有语法错误
目前,Microsoft 没有为较新的 c++ 字符类型提供等效的StringCbLengthA
和:和. 所以,我决定为新的字符类型复制当前的实现。对于,我添加了这个函数:StringCbLengthW
char16_t
char32_t
char16_t
但是,这会生成C28285类型的警告。无论如何,要修复此代码以避免此警告?
c - 将 UTF8 字符文字分配给 char16_t - 字符常量中的字符太多
我正在为嵌入式系统创建一个 UTF8 表查找。该表用于将 UTF8 编码字符转换为字体(数组)中的位图索引。
我收到警告“多字符字符文字(潜在的可移植性问题)”。“conversion_table”数组中的每个条目都带有此警告标记。
这是代码:
有什么方法可以更改上述代码以消除警告?
(注意:在0x00
确定实际位图索引之前,它是一个占位符。)
生成的数据是正确的:
资源:
编译器——IAR Embedded Workbench 7.4 版
目标平台:ARM Cortex M
gcc - char16_t 的 gcc 10.3 和 gcc 11.1 之间的 memcmp 差异
我正在转换一些使用 memcmp 函数但没有得到预期输出的测试。现在我一直在试图弄清楚为什么 windows 和 linux 的输出存在差异,最后我找到了godbolt.org。x86-64 gcc 10.3
在那里我玩弄了不同的 gcc 版本,令我惊讶的是和之间存在差异x86-64 gcc 11.1
。你能帮我弄清楚正确的输出是什么吗?
使用的代码:
Gcc 10.3 输出
Gcc 11.1 输出
VS 2019 / MSVC 14.29.30133 输出
在这个例子中,MSVC 看起来总是准确地返回 1。对于 gcc,有时情况并非如此,因为它似乎会返回差异。所以介于83'S'
and78'N'
是 5 所以返回。现在我的问题是,这是正确的输出还是在这种情况下应该只是“1”来表示存在差异并且 ptr1 高于 ptr2?我查看了一些文档,但对于它应该是什么有点模糊。
c++ - C++ 将 wchar_t 转换为 char16_t 并返回
我有一个应该在所有平台上运行的程序。所以我需要摆脱 wchar_t 并改用 char16_t 。如何转换 wchar_t <-> char16_t例如,我将如何在这里使用 wsclen()?