unicode - 如何将 UTF-16 转换为 ASCII

标签 unicode assembly ascii mips

我正在用 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。
  • 关于unicode - 如何将 UTF-16 转换为 ASCII,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5364977/

    相关文章:

    javascript - 在 JavaScript 中表达 UTF-16 unicode 字符

    c - 如何从 gdb 读取 fread 值

    windows - 在 Windows 64 位上实现带有自定义堆栈的沙箱

    java - ASCII 世界地图导入和读取

    python - 如何在 python 中使用 OurSQL 仅在 UNICODE 中与 MySQL 数据库通信?

    unicode - 在 Lucene 中使用变音符号索引和搜索法语文本

    php - 如何在 php 中将字节(UTF-8)转换为 Unicode?

    assembly - 在程序集中将值设置为 null

    c++ - 如何在 C/C++ (cpp) 中将 ASCII 保存为 Unicode (UTF-16LE)?

    java - 在java中编码特殊字符