【发布时间】:2015-02-08 15:51:26
【问题描述】:
我目前正在为一个学校项目重写(部分)printf() 函数。
总的来说,我们需要用几个标志、转换、长度修饰符来重现函数的行为......
我剩下要做的唯一一件让我陷入困境的事情是标志%C/%S(或%lc/%ls)。
到目前为止,我已经收集到 wchar_t 是一种可以将字符存储在多个字节上的类型,以便接受更多字符或符号,因此几乎与所有语言兼容,无论它们的字母和特殊字符。
但是,我无法找到任何关于机器上的 wchar 的具体信息,它的实际长度(这显然取决于包括编译器、操作系统在内的几个因素......)或如何实际编写它们。
提前谢谢你
请注意,我们被允许使用的功能是有限的。唯一允许的函数是write()、malloc()、free() 和exit()。
我们必须能够自己编写任何其他必需的函数。
总结一下,我在这里要问的是一些关于如何“手动”解释和编写任何wchar_t 字符的信息,代码尽可能少,以便我可以尝试理解整个过程和代码我自己。
【问题讨论】:
-
我将首先缩小
wchar_t在您的情况下的含义。在大多数 *nix 系统上,这意味着 UTF-32。在 Windows 上,它表示 UTF-16。之后,您需要决定您的狭窄char将是什么。在大多数 *nix 系统上,它意味着 UTF-8。好消息是 Unicode 表示之间的转换非常明确。 -
sizeof(wchar_t)应该仍然可以工作,对吧? -
@Kninnug - 它确实有效,并返回 4 个字节。
-
@Mgetz - 它似乎是 UTF-32(学校的 MAC OSX。我会在家里尝试 debian)。因此,如果我的回答正确,我的目标是尝试将 UTF-32 字符转换为 UTF-8 字符,对吗?
-
@kRYOoX 我的评论是提供指导,而不是为你做作业。