在阅读文档后,我尝试了以下代码:
create buff 128 allot
buff 128 stdin read-line throw
我希望这能为buff的每个连续地址提供一个字符,但我得到了一个奇怪的数字:
buff @ ok
. 3689349013085184353 ok
我在这里错过了什么?
buff
将buff
变量的地址放在(数据)堆栈上。该地址旁的存储器包含从stdin
接收的输入,类似于以下内容:
Address Value
------- -----
N+0 0x61
N+1 0x61
N+2 0x61
N+3 0x61
N+4 0x61
N+5 0x33
N+6 0x33
N+7 0x33
... ...
@
字将buff
留下的地址转换为该地址的整数值。但是,由于您(显然)得到了一个64位的gforth
版本,@
返回了一个从给定地址开始的64位(即8字节)值,即0x3333336161616161
,它是十进制的3689349013085184353
。.
单词刚刚显示了这个数字。
如果要获取特定的字节,请使用c@
而不是@
:
buff c@ .
这将为您提供缓冲区中第一个字符的代码(0x61
或97
)。如果您想获得第二个项目,请在执行c@
之前增加地址,如下所示:
buff 1+ c@ .
同样,这将为您提供第六个字符的代码:
buff 5 + c@ .