微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Gforth-如何获取字符串的代码点?

如何解决Gforth-如何获取字符串的代码点?

我知道gforth将字符作为代码点存储在堆栈中,但是material I'm learning from没有显示任何有助于将每个字符转换为代码点的单词。

我也想对字符串的代码点求和。我该怎么做?

解决方法

字符和代码点在Forth中无法区分。也就是说,无法获得不是代码点的字符。

在Forth中,您可以区分原始字符(ASCII)和扩展字符(Unicode)。

另请参见Extended-Character word set

扩展字符存储在编码为一个或多个原始字符(pchars)的内存中。

要读取原始字符(ASCII或pchar,通常是八位字节),我们使用c@ ( c-addr -- char )

: sum-codes ( c-addr u -- sum ) 0 -rot over + swap ?do i c@ + 1 chars +loop ;

\ test
"test passed" sum-codes .

NB:Gforth的最新版本支持本机字符串文字。在此之前,您需要将s"一词用作s" test passed"

要阅读扩展字符,我们可以使用xc@+ ( xc-addr1 -- xc-addr2 xchar )

: sum-xcodes ( c-addr u -- sum )
  over + >r 0 swap
  begin ( sum xc-addr ) dup r@ u< while
    xc@+ ( sum xc-addr2 xchar ) swap >r + r>
  repeat drop rdrop
;

\ test
"test ⇦ ⇨ ⇧ ⇩" 2dup dump cr sum-xcodes . cr

dump显示在Gforth中,字符以UTF-8编码存储在内存中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?