阅读文档后,我尝试了以下代码:
create buff 128 allot
buff 128 stdin read-line throw
我希望这会让我为 buff 的每个连续地址获得一个字符,但我在那里得到了这个奇怪的数字:
buff @ ok
. 3689349013085184353 ok
我在这里想念什么?
阅读文档后,我尝试了以下代码:
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@ .