Я не думаю, что есть один.
- Вы можете легко сделать это с помощью встроенных функций, когда вы работаете с числами.Например, чтобы напечатать число 142857 с ведущими 0 более 30 символов, используйте
Printf.printf "%030d" 142857
. - . Вы также можете заставить его работать со строками, если вы хорошо используете начальные пробелы вместо начальных нулей.Например,
Printf.printf "%30s" "abcdefg"
. - Наконец, если нужно, вы можете определить свою собственную функцию, если это необходимо.
Способ работы первых двух опций - Printf
, что тоже чрезвычайно полезно, вам действительно нужно научиться в какой-то момент. Здесь - это документация для OCaml, но многие языки программирования имеют похожий инструмент.
В %030d
мы начали с %d
, который является заполнителем, который будет заменен нацелое число (в нашем случае 142857).Мы установили минимальную ширину 30 (по умолчанию выровнена по правому краю), добавив 30 между двумя символами: %30d
.Наконец, мы добавили опцию, чтобы сделать начальные символы нулями вместо пробелов, добавив 0 после знака процента.
%30s
- это просто заполнитель для выровненной по правому краю строки не менее 30 символов (сначальные пробелы, потому что опции для начальных нулей работают только с числами).
Теперь вот функция zfill, если по какой-то причине вы не можете использовать хорошо выбранный формат Printf в вашем сценарии:
let zfill n s =
let length = Bytes.length s in
if n <= length then
s
else
let result = Bytes.make n '0' in
Bytes.blit s 0 result (n-length) length;
result
;;
Обратите внимание, что если производительность является проблемой (хотя, вероятно, это не так), она должна выполняться быстрее, чем решение создания строки нулей с последующим объединением ее с s
, как при blit
выполняется "на месте", конкатенация строк - нет, поэтому необходимо создать временную строку нулей.В большинстве случаев это не должно иметь большого значения, и вы можете использовать любой из этих вариантов.