2

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

   create buff 128 allot
   buff 128 stdin read-line throw

我希望这会让我为 buff 的每个连续地址获得一个字符,但我在那里得到了这个奇怪的数字:

buff @  ok
. 3689349013085184353  ok

我在这里想念什么?

4

1 回答 1

3

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@ .

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

buff 1+ c@ .

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

buff 5 + c@ .
于 2012-08-05T18:45:54.583 回答