kRY*_*OoX 9 c printf wchar-t widechar
我目前正在重写(部分)printf()学校项目的功能.总的来说,我们需要使用几个标志,转换,长度修饰符来重现函数的行为......
我唯一要做的就是让我卡住的是旗帜%C/ %S(或%lc/ %ls).
到目前为止,我收集的wchar_t是一种可以在多个字节上存储字符的类型,以便接受更多字符或符号,因此几乎与所有语言兼容,无论其字母和特殊字符如何.
但是,我无法找到有关wchar机器外观的具体信息,它的实际长度(显然根据包括编译器,操作系统等几个因素而有所不同)或如何实际编写它们.
先感谢您
请注意,我们在允许使用的功能方面受到限制.唯一允许的功能是write(),malloc(),free(),和exit().我们必须能够自己编写任何其他所需的功能.
总结一下,我在这里要问的是如何解释和编写"手动"任何wchar_t字符的一些信息,尽可能少的代码,以便我可以尝试理解整个过程并自己编写代码.
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()这样的函数.