我目前正在重写(部分)学校项目的printf()
功能。
总的来说,我们需要使用几个标志,转换,长度修饰符来重现函数的行为......
我唯一要做的就是让我陷入困境的是旗帜%C
/ %S
(或%lc
/ %ls
)。
到目前为止,我已经收集到wchar_t
是一种可以在多个字节上存储字符的类型,以便接受更多字符或符号,因此几乎与所有语言兼容,无论它们是什么字母和特殊字符。
然而,我无法找到关于wchar
机器的外观的具体信息,它的实际长度(显然根据包括编译器,操作系统等几个因素而有所不同)或者如何实际写它们。
提前谢谢
请注意,我们在允许使用的功能方面受到限制。唯一允许的功能是write()
,malloc()
,free()
和exit()
。
我们必须能够自己编写任何其他所需的函数。
总结一下,我在这里要问的是如何解释和编写“手动”任何wchar_t
字符的一些信息,尽可能少的代码,以便我可以尝试理解整个过程并自己编写代码。
答案 0 :(得分:5)
wchar_t类似于char,因为它是一个数字,但是当显示char或wchar_t时,我们不希望看到数字,而是与数字对应的绘制字符。从数字到字符的映射既不是char也不是wchar_t,它们依赖于系统。因此char和wchar_t之间的最终用法没有区别,除了它们的大小。
鉴于上述情况,printf(“%ls”)最简单的实现是你知道什么是与char和wchar_t一起使用的系统编码的实现。例如,在我的系统中,char有8位,编码为UTF-8,而wchar_t为32位,编码为UTF-32。因此printf实现只是从UTF-32转换为UTF-8并输出结果。
更通用的实现必须支持不同的可配置编码,并且可能需要检查当前编码是什么。在这种情况下,必须使用wcsnrtombs()或iconv()等函数。