ドキュメントを読んだ後、次のコードを試しました。
create buff 128 allot
buff 128 stdin read-line throw
これにより、連続するバフのアドレスごとに文字が取得されることを期待していましたが、次の奇妙な数字が表示されます。
buff @ ok
. 3689349013085184353 ok
ここで何が欠けていますか?
ドキュメントを読んだ後、次のコードを試しました。
create buff 128 allot
buff 128 stdin read-line throw
これにより、連続するバフのアドレスごとに文字が取得されることを期待していましたが、次の奇妙な数字が表示されます。
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
バージョンを取得したため、指定されたアドレス (つまり、10 進数)@
で始まる 64 ビット、つまり 8 バイトの値が返されました。その言葉はあなたにその数を示しただけです。0x3333336161616161
3689349013085184353
.
特定のバイトを取得したい場合は、c@
代わりに@
次を使用します。
buff c@ .
これにより、バッファ内の最初の文字のコードが得られます (0x61
または97
)。c@
2 番目の項目を取得する場合は、次のように、実行する前にアドレスをインクリメントします。
buff 1+ c@ .
同様に、これは 6 番目の文字のコードを取得します。
buff 5 + c@ .