自我教育需要记住的重要一点——C++ 是大量类型转换的,而 Forth 则完全相反。您希望高度是字符串、整数还是浮点数,它是有符号的还是无符号的?每个都有自己的用例。无论您选择什么,都必须牢记您选择的类型与 Height 变量进行交互。每次都想想你的比特意味着什么。
从您的 ATOI 调用来看,我假设您希望将 Height 的值作为整数。不过,一个 5 字节的整数是不寻常的,所以我仍然不确定。但这里有这个假设:
VARIABLE Height 1 CELLS ALLOT
VARIABLE StrBuffer 7 ALLOT
: setHeight ( -- )
StrBuffer 8 ACCEPT
DECIMAL ATOI Height ! ;
CELLS 调用确保您创建的变量具有您的 CPU 喜欢的位数。DECIMAL 调用确保您没有在 ATOI 之前的某个地方更改为 HEX。
创建 StrBuffer 变量是获得字符串暂存空间的众多方法之一。假设您的 CELL 是 16 位的,那么对于一个以零结尾的 16 位有符号整数,您最多需要 7 个字符——例如,“-32767\0”。一些实现有 PAD,可以用来代替创建自己的缓冲区。另一个常用词是 SCRATCH,但我不认为它按我们想要的方式工作。
如果您坚持创建自己的字符串缓冲区空间,我个人喜欢这样,因为您确切知道自己获得了多少空间,那么请考虑为所有单词的字符串处理需求创建一个大缓冲区。例如:
VARIABLE StrBuffer 201 ALLOT
这也使您不必做出 16 位 CELL 假设,因为 200 个字符很容易容纳 64 位有符号整数,以防您现在或将来某天实现的 CELL 大小。