В PostScript нет таких вещей, как «символы ASCII» (за пределами источника данных в кодировке ASCII85), и сгенерированное вами число уже является «шестнадцатеричным байтом» в том смысле, что оно является 8-разрядным целочисленным значением.
В языке нет объектов данных, которые соответствуют тому, что вы, похоже, ищете (символ ASCII или шестнадцатеричный байт). Но вы на самом деле не сказали, какова ваша цель, если бы мы знали больше о предполагаемом конечном использовании цифр, было бы гораздо проще дать совет.
Я собираюсь предположить, что, поскольку вы хотите «сгенерировать случайную строку шестнадцатеричных байтов», вам на самом деле нужна строка. Итак, первое, что вам нужно сделать, это создать строку, достаточно большую, чтобы вместить ваш вывод. Вы не говорите, насколько велик ожидаемый результат, поэтому предположим, что вам нужна строка из 20 байтов.
20 string
создаст вам строку длиной 20 байт. Затем вы хотите сгенерировать и сохранить 20 байтов данных. Самый простой способ сделать это, конечно, в цикле. Так что-то вроде:
0 1 19 {
pop % remove the loop count from the stack
rand % generate a number in the range 0->2^31 -1
255 mod % modulo down to the range 0->255
} for
Затем вы хотите поместить эти байты в строку, для этого вы используете оператор put
. Это определено на странице 635 третьего издания Справочного руководства по языку PostScript. Существует три варианта в зависимости от типа параметра составного объекта; массив, словарь или строка, вы, очевидно, хотите версию строки. Это занимает три аргумента; строка, индекс в строку, в которую вы хотите поместить значение, и значение, которое нужно поместить в эту позицию.
Тривиально использовать индекс, который мы извлекли из стека в цикле выше, в качестве индекса в строке. Итак, все, что осталось, это собрать нашу процедуру:
20 string % Create a string to hold our output
0 1 19 % initial value, increment, and limit, for the loop
{ % stack - string, index
1 index % copy the string, stack - string, index, string
exch % swap top two stack elements stack - string string index
rand % geenrate random number stack - string string index rnd
255 mod % bring into range stack - string string index rnd
put % put 'rnd' into 'string' at position 'index' stack - string
} for % end procedure
%
% stack now contains string with 20 random bytes 0->255
Если удобнее использовать массив вместо строки, методика точно такая же.
PostScript на самом деле очень простой язык, но в наши дни он необычен тем, что основан на стеке. У него есть некоторые тонкости; Использование строки в программе выше демонстрирует, как ссылки на составные объекты эффективно обрабатываются как указатели. Если вы действительно хотите сделать копию составного объекта, вам нужно использовать оператор копирования.
Мне также любопытно, почему вы вообще используете язык, если у вас так много проблем с ним?