大点要记住你的自我-edification - C++是严重的typecasted,福斯是co完全相反。您希望Height是一个字符串,一个整数还是一个浮点数,并且它是带符号还是无符号?每个都有自己的用例。无论您选择什么,您都必须根据您选择的类型与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位单元的假设,因为200个字符,可轻松容纳64位有符号整数,如果这就是现在你的执行的单元尺寸或某一天下来路。
由于PAD是在CORE wordset一个标准的话,所有标准的Forth是_required_有PAD。由于PAD只是用作这种临时缓冲区,所以我没有看到为此创建自己的缓冲区。 –
@MichaelMorris在设计为以编译应用程序运行的嵌入式应用程序中,PAD可能存在,但可能无法正常工作。例如,编译的字典在设备交付时很难写入闪存,并且永远不会为用户提供交互性。PAD通常通过使用字典顶部来实现,但如果不支持写入Flash,则写入PAD将失败。此外,FWIW,它是CORE EXT词汇组的一部分,而不是CORE。 – CivFan