如何解决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 举报,一经查实,本站将立刻删除。