2

ドキュメントを読んだ後、次のコードを試しました。

   create buff 128 allot
   buff 128 stdin read-line throw

これにより、連続するバフのアドレスごとに文字が取得されることを期待していましたが、次の奇妙な数字が表示されます。

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バージョンを取得したため、指定されたアドレス (つまり、10 進数)@で始まる 64 ビット、つまり 8 バイトの値が返されました。その言葉はあなたにその数を示しただけです。0x33333361616161613689349013085184353.

特定のバイトを取得したい場合は、c@代わりに@次を使用します。

buff c@ .

これにより、バッファ内の最初の文字のコードが得られます (0x61または97)。c@2 番目の項目を取得する場合は、次のように、実行する前にアドレスをインクリメントします。

buff 1+ c@ .

同様に、これは 6 番目の文字のコードを取得します。

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