Преобразовать строку байтов в десятичную - PullRequest
0 голосов
/ 11 мая 2019

Я ищу самое простое решение для преобразования из байтовой строки (что-то вроде "\ 000 \ 001 \ 002 \ 003") в десятичное число в OCaml.

Спасибо всем!

1 Ответ

0 голосов
/ 11 мая 2019

Хмм, байты и строка - это два разных типа в OCaml. Я предполагаю, что вы говорите о строке, а не о значении байтов типа.

Если вы уверены, что ваш ввод имеет правильную форму, вы можете просто добавить '0' к каждому элементу, а затем использовать int_of_string.

let convert s =
    let s' =
        String.map
        (fun c -> Char.chr (Char.code c + Char.code '0'))
        s
    in
    int_of_string s'

Вот как это работает:

# let convert = ...
val convert : string -> int = <fun>
# convert "\000\001\002\003";;
- : int = 123

Для серьезного использования вы хотели бы убедиться, что входные байты находятся в правильном диапазоне. Вы можете вернуть значение типа int option (где None указывает, что ввод был неверным). Или вы можете вызвать исключение для неверного ввода.

...