String Postscript:如何将整数转换为字符串?

String Postscript:如何将整数转换为字符串?,string,numbers,postscript,String,Numbers,Postscript,在postscript中,cvs*运算符*被称为将数字转换为字符串。我应该如何使用它? 我试过: 100 100 moveto 3.14159 cvs show 或 但它不起作用 有什么帮助吗?试试3.14159 20字符串cvs显示 string需要一个大小,并将创建的字符串保留在堆栈上cvs需要一个值和一个字符串来存储转换后的值 如果要进行大量字符串转换,则创建一个字符串并在每次转换中重用它可能会更有效: /s 20 string def 3.14159 s cvs show 一个常见的

在postscript中,cvs*运算符*被称为将数字转换为字符串。我应该如何使用它? 我试过:

100 100 moveto
3.14159 cvs show

但它不起作用


有什么帮助吗?

试试
3.14159 20字符串cvs显示

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

如果要进行大量字符串转换,则创建一个字符串并在每次转换中重用它可能会更有效:

/s 20 string def
3.14159 s cvs show

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

1.42857 (       ) cvs show
您甚至可以通过向CV显示较大字符串的各种子字符串来进行格式化输出

%0123456.......
(2/7 =         ) dup 6 7 getinterval
2.85714 exch cvs pop show
但是法律禁止这样做。这几乎是我们唯一出版的Postscript风格指南。(在comp.lang.postscript中)因此,一个常见的建议是在需要时分配一个新字符串,并让垃圾收集器获得它的支持

4.28571 7 string cvs show
作为最后手段,真正懒惰的黑客将劫持
=string
,这是
=
=
用来输出数字的内置128字节缓冲区(当然,使用我们的朋友
cvs

如果您喜欢这个,您可以将它与
=
的另一个技巧结合起来:立即计算名称

{ 7.14285 //=string cvs show }   % embed =string in this procedure
这就减少了额外的微秒,并且使得以交互方式检查代码变得更加困难。在此过程中调用
==
,不会显示您正在使用
=string
;它看起来就像任何其他字符串

%0123456.......
(2/7 =         ) dup 6 7 getinterval
2.85714 exch cvs pop show

还有一个骗局,来自。这是获取零填充整数的简单方法

/bindec         % <integer> bindec <string_of_length_6>
{
        1000000 add 7 string cvs 1 6 getinterval
}bind def 
/bindec%bindec
{
1000000添加7个字符串cvs 1 6 getinterval
}绑定def

我不知道这是否是GhostScript中的一个bug(语言规范对此不清楚):字符串似乎不是由
cvs
终止的,因此如果您有
5个字符串
,首先转换
-10.0
,然后转换
0.0
,那么字符串将保持
0.0.0
(GPL GhostScript 9.26)。请参阅
/bindec         % <integer> bindec <string_of_length_6>
{
        1000000 add 7 string cvs 1 6 getinterval
}bind def