gpt4 book ai didi

c - 在 C 中理解和编写 wchar_t

转载 作者:太空狗 更新时间:2023-10-29 16:56:14 25 4
gpt4 key购买 nike

我目前正在为一个学校项目重写(部分)printf() 函数。总的来说,我们需要用几个标志、转换、长度修饰符来重现函数的行为......

我唯一要做的事情就是让我卡住的是标志 %C/%S (或 %lc/%ls)。

到目前为止,我已经收集到 wchar_t 是一种可以在多个字节上存储字符的类型,以便接受更多的字符或符号,因此与几乎所有语言兼容,不管他们的字母和特殊字符。

但是,我无法找到关于机器的 wchar 长什么样的任何具体信息,它是实际长度(这显然因包括编译器、操作系统 . ..) 或者如何实际编写它们。

提前致谢

请注意,我们被允许使用的功能是有限的。唯一允许的函数是 write()malloc()free()exit()。我们必须能够自己编写任何其他所需的功能。

总结一下,我在这里要问的是一些关于如何“手动”解释和编写任何 wchar_t 字符的信息,代码越少越好,这样我就可以尝试理解整个过程并自己编写代码。

最佳答案

wchar_t 在某种意义上类似于 char,它是一个数字,但在显示 charwchar_t 时我们不不是要看数字,而是要看数字对应的画出来的字符。 charwchar_t 都没有定义从数字到字符的映射,它们取决于系统。所以 charwchar_t 除了大小不同,在最终用法上没有区别。

鉴于上述情况,printf("%ls") 最简单的实现是您知道与 char 一起使用的系统编码是什么>wchar_t。例如,在我的系统中,char 有 8 位,编码为 UTF-8,而 wchar_t 为 32 位,编码为 UTF-32。所以 printf 实现只是将 UTF-32 转换为 UTF-8 并输出结果。

更通用的实现必须支持不同的和可配置的编码,并且可能需要检查当前的编码是什么。在这种情况下,必须使用 wcsnrtombs()iconv() 等函数。

关于c - 在 C 中理解和编写 wchar_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27401231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com