Что делает output_binary_int в OCaml? - PullRequest
0 голосов
/ 12 марта 2020
output_binary_int stdout 1101

печатает M на стандартный вывод.

В do c написано "Написать одно целое число в двоичном формате (4 байта, big-endian)", но я не совсем понимаю, что делать с этой функцией.

1 Ответ

1 голос
/ 12 марта 2020

Если вы смотрите на стандартный вывод в терминале, вы ожидаете, что стандартный вывод будет состоять из последовательности символов.

Вывод output_binary_int не является символами, это необработанное 32-разрядное целое число ценность. Поскольку байт составляет 8 бит, это означает, что он будет выводить 4 байта. Но они, как правило, не будут байтами, которые имеют смысл при просмотре в виде символов.

Будет более разумно, если вы отправите вывод в файл, а затем посмотрите на содержимое файла. Примерно так:

$ rlwrap ocaml
        OCaml version 4.10.0

# let ochan = open_out "mybfile";;
val ochan : out_channel = <abstr>
# output_binary_int ochan 1101;;
- : unit = ()
# close_out ochan;;
- : unit = ()
# ^D
$ od -tx1 mybfile
0000000    00  00  04  4d
0000004

Как видите, в файл записано 4 байта двоичных данных. 4 байта представляют значение 1101 в формате с прямым порядком байтов.

Если вы не знакомы с двоичными целочисленными представлениями (извините, если вы), это означает, что значение в файле представляет шестнадцатеричное значение 0x0000044d Это действительно 1011.

Если кодировка вашего терминала - UTF-8 (что является обычным), то на выходе будут представлены два нулевых символа, за которыми следует символ Control-D (ни один из них не имеет визуального представление), за которым следует символ с кодом 0x4d, который на самом деле равен M.

...