如何从gforth中的stdin读取内容并将其存储在变量中



在阅读文档后,我尝试了以下代码:

   create buff 128 allot
   buff 128 stdin read-line throw

我希望这能为buff的每个连续地址提供一个字符,但我得到了一个奇怪的数字:

buff @  ok
. 3689349013085184353  ok

我在这里错过了什么?

buffbuff变量的地址放在(数据)堆栈上。该地址旁的存储器包含从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@ .

这将为您提供缓冲区中第一个字符的代码(0x6197)。如果您想获得第二个项目,请在执行c@之前增加地址,如下所示:

buff 1+ c@ .

同样,这将为您提供第六个字符的代码:

buff 5 + c@ .

相关内容

  • 没有找到相关文章

最新更新