后记:如何将整数转换为字符串?

Pie*_*rre 15 string numbers postscript

在postscript中,cvs*operator*被称为将数字转换为字符串.我该怎么用?我试过了 :

100 100 moveto
3.14159 cvs show
Run Code Online (Sandbox Code Playgroud)

要么

100 100 moveto
3.14159 cvs string show
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

有帮助吗?

lhf*_*lhf 13

试试3.14159 20 string cvs show.

string需要一个大小并将创建的字符串留在堆栈上. cvs需要一个值和一个字符串来存储转换后的值.

如果您正在进行大量的字符串转换,那么创建一个字符串并在每次转换中重用它可能更有效:

/s 20 string def
3.14159 s cvs show
Run Code Online (Sandbox Code Playgroud)


lus*_*oog 13

一个常见的习惯用法是使用文字字符串作为模板.

1.42857 (       ) cvs show
Run Code Online (Sandbox Code Playgroud)

您甚至可以通过使用更大字符串的各种子字符串呈现cvs来执行格式化输出.

%0123456.......
(2/7 =         ) dup 6 7 getinterval
2.85714 exch cvs pop show
Run Code Online (Sandbox Code Playgroud)

Ghostscript风格指南禁止这样做.它几乎是我们发布的唯一已发布的Postscript风格指南.(在comp.lang.postscript中对此进行了讨论.)因此,一个常见的建议是在需要时分配一个新的字符串,让垃圾收集器获得它的保留.

4.28571 7 string cvs show
Run Code Online (Sandbox Code Playgroud)

作为最后的手段,真正的懒惰黑客劫持=string,通过使用内置的128字节的缓冲区===输出数字(使用,当然,我们的朋友cvs).

5.71428 =string cvs show
Run Code Online (Sandbox Code Playgroud)

如果你喜欢那个,你可以将它与=其他技巧结合起来:立即评估名称.

{ 7.14285 //=string cvs show }   % embed =string in this procedure
Run Code Online (Sandbox Code Playgroud)

这样可以减少额外的微秒,并使交互式检查代码变得更加困难.调用==此程序不会显示您正在使用的事实=string; 它看起来就像任何其他字符串.


这个包的另一个技巧,来自Helge Blischke在comp.lang.postscript中的帖子.这是获得零填充整数的简单方法.

/bindec         % <integer> bindec <string_of_length_6>
{
        1000000 add 7 string cvs 1 6 getinterval
}bind def 
Run Code Online (Sandbox Code Playgroud)