我正在写一些类似于atoi()或的字符串转换函数strtoll().我想要包含一个我的函数版本,它接受char16_t*或char32_t*而不仅仅是char*或wchar_t*.
我的功能很好,但正如我写的那样,我意识到我不明白char16_t或char32_t是什么.我知道标准只要求它们分别是至少16或32位的整数类型,但暗示它们是UTF-16或UTF-32.
我也知道标准定义了几个函数,但它们没有包含任何*get或*put函数(就像它们wchar.h在C99中添加时那样).
所以我想知道:他们期望我用char16_t和char32_t做什么?
这是一个很好的问题,没有明显的答案.
uchar.hC11中添加的类型和功能基本上没用.它们仅支持新类型(char16_t或char32_t)与特定于语言环境的实现定义的多字节编码之间的转换,除非语言环境基于UTF-8,否则这些映射不会完整.wchar_t不支持有用的转换(往返于UTF-8或来自UTF-8).当然,你可以滚你自己从UTF-8转换为/,因为这些转换都是由相关RFC/UCS/Unicode的标准规定的100%,但要注意:大多数人实现他们的错误,并存在危险的bug.
请注意,新编译器级的特征为UTF-8,UTF-16,和UTF-32的文字(u8,u,和U,分别地)是潜在有用的; 您可以使用您自己的函数以有意义的方式处理结果字符串,而这些方法完全不依赖于语言环境.但在我看来,C11中对Unicode 的库级支持基本上没用.
| 归档时间: |
|
| 查看次数: |
2698 次 |
| 最近记录: |