我正在用 MIPS 汇编语言编写一个子程序来将 ASCII 转换为 UTF-16,反之亦然。但是,我找不到如何转换它的任何技巧。
感谢您的任何想法。
伪代码,假设您的字节是八位字节并且不需要零终止:
从 ASCII 到 UTF-16 的转换
给定一个长度为 n(以字节为单位)的 ASCII 输入字符串,该字符串按顺序存储在地址 p 的内存中。 分配 2 × n 字节的内存;令该内存的起始地址为 q。 当 n 大于零时:
检查 p 处的字节是否为有效的 ASCII 字符。如果不使用校验和,最高有效位必须为零,否则它必须是正确的校验和。如果字节无效,则发出错误。 将 p 处的字节零扩展到 q 处的 16 位字。这是如何完成的取决于指令集;例如,x86 有 MOVZX
.您可能还需要注意正确的字节顺序。 将 p 增加 1。将 q 增加 2。将 n 减 1。 从 UTF-16 到 ASCII 的无损转换
给定一个长度为 n(以代码单元为单位)的 UTF-16 输入字符串,该字符串按顺序存储在地址 p 的内存中。 分配n个字节的内存;令该内存的起始地址为 q。 当 n 大于零时:
检查 p 处的 16 位字是否代表有效的 ASCII 字符。九个最高有效位必须为零,否则字符无法用 ASCII 表示。如果该词无效,则发出错误。 将 p 处 16 位字的最低有效字节移动到 q 处的字节。 如果需要,向 q 处的字节添加校验和。 将 p 增加 2。将 q 增加 1。将 n 减 1。