【问题标题】:Postscript: how to convert a integer to string?后记:如何将整数转换为字符串?
【发布时间】:2011-11-24 18:38:52
【问题描述】:

在 postscript 中,cvs *operator* 据说将数字转换为字符串。我应该如何使用它? 我试过了:

100 100 moveto
3.14159 cvs show

100 100 moveto
3.14159 cvs string show

但是没有用。

有什么帮助吗?

【问题讨论】:

    标签: string numbers postscript


    【解决方案1】:

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

    1.42857 (       ) cvs show
    

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

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

    但是Ghostscript Style Guide 禁止这样做。它几乎是我们唯一发布的 Postscript 样式指南。 (A discussion about this 在 comp.lang.postscript 中。)因此,一个常见的建议是在需要时分配一个新字符串,并让垃圾收集器获得保留。

    4.28571 7 string cvs show
    

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

    5.71428 =string cvs show
    

    如果您喜欢那个,您可以将它与= 的另一个技巧结合使用:立即评估名称。

    { 7.14285 //=string cvs show }   % embed =string in this procedure
    

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


    包的另一个技巧,来自a post by Helge Blischke in comp.lang.postscript。这是获取零填充整数的简单方法。

    /bindec         % <integer> bindec <string_of_length_6>
    {
            1000000 add 7 string cvs 1 6 getinterval
    }bind def 
    

    【讨论】:

      【解决方案2】:

      试试3.14159 20 string cvs show

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

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

      /s 20 string def
      3.14159 s cvs show
      

      【讨论】:

      • 我不知道这是否是 GhostScript 中的错误(语言规范对此并不清楚):似乎字符串没有被 cvs 终止,所以如果你有一个 5 string 并转换首先是-10.0,然后是0.0,字符串包含0.0.0(GPL Ghostscript 9.26)。
      猜你喜欢
      • 2019-10-31
      • 2019-10-16
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多