如何将UTF-16转换为ASCII

时间:2011-03-19 21:19:14

标签: unicode assembly ascii mips

我正在用MIPS汇编语言编写子程序,将ASCII转换为UTF-16,反之亦然。但是,我找不到任何技巧如何转换它。

感谢任何想法。

3 个答案:

答案 0 :(得分:6)

伪代码,假设您的字节是八位字节,并且不需要零终止:

从ASCII转换为UTF-16

  1. 给定一个长度为 n 的ASCII输入字符串(以字节为单位),按顺序存储在地址 p 的内存中。
  2. 分配2× n 个字节的内存;让该内存的起始地址为 q
  3. 虽然 n 大于零:
    1. 检查 p 处的字节是否为有效的ASCII字符。如果不使用校验和,则最高有效位必须为零,否则必须是正确的校验和。如果字节无效,则发出错误。
    2. p 处的字节零扩展为 q 处的16位字。如何完成取决于指令集;例如,x86具有MOVZX。您也可以注意正确的字节顺序。
    3. p 增加1。
    4. 增加 q 2。
    5. n 减少1。
  4. 从UTF-16到ASCII

    的无损转换
    1. 给定一个长度为 n 的UTF-16输入字符串(以代码为单位),按顺序存储在地址 p 的内存中。
    2. 分配 n 字节的内存;让该内存的起始地址为 q
    3. 虽然 n 大于零:
      1. 检查 p 处的16位字是否代表有效的ASCII字符。九个最高有效位必须为零,否则该字符在ASCII中不可表示。如果单词无效,则发出错误。
      2. p 处的16位字的最低有效字节移动到 q 处的字节。
      3. 如果需要,请在 q 的字节中添加校验和。
      4. p 增加2。
      5. q 增加1。
      6. n 减少1。

答案 1 :(得分:1)

只要你只拥有UCS2(只有16位代码点),你就可以通过short <-> char - 转换直接转换为ASCII,只转换小于128的数字。

答案 2 :(得分:1)

术语ASCII不是非常具体。

ISO-646是Unicode UTF-16的子集。因此'7位'ASCII数字已经是 Unicode(即你只是将它们放到16位值的底部),而对于另一个方向,你所要做的就是取低如果这是你的意思,那么来自Unicode的8位来获取ASCII。

另一方面,如果您需要ISO-8859-1(Latin-1),则需要转换表。没有公式可以用汇编语言翻译成简单的指令。