首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将UTF-16转换为ASCII

如何将UTF-16转换为ASCII
EN

Stack Overflow用户
提问于 2011-03-20 05:19:14
回答 3查看 18K关注 0票数 5

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

谢谢你的点子。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-21 01:30:24

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

从ASCII到UTF-16的转换

  1. 给定一个长度为n(以字节为单位)的ASCII输入字符串,按顺序存储在地址p处的内存中。
  2. 分配2×n字节的内存;设该内存的起始地址为q。
  3. than n大于0:
    1. 检查p处的字节是否为有效的ASCII字符。如果不使用校验和,则最高有效位必须为零,否则必须是正确的校验和。如果字节未将p处的字节valid.
    2. Zero-extend到q处的16位字,则发出错误。如何执行取决于指令集;例如,x86具有MOVZX。你也可以注意正确的endianness.
    3. Increment p by 1.
    4. Increment q by 2.
    5. Decrement n by 1.

UTF-16到ASCII的无损转换

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

票数 6
EN

Stack Overflow用户

发布于 2011-03-20 05:26:38

只要您只有ASCII码(只有16位码点),您就可以通过执行short <-> char-conversion只转换小于128的数字来直接转换为ASCII码。

票数 1
EN

Stack Overflow用户

发布于 2011-03-20 05:27:27

ASCII这个术语不是很具体。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5364977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档