Как передать строку в функцию, которая может создать двоичный файл позже? - PullRequest
0 голосов
/ 23 мая 2011

Это моя функция, когда я вызываю my_conv ("2312144", 10, 10), она выдает ошибку "неверный аргумент"

my_conv(S, Start, End) ->
  Res = <<Start:8, End:8, S:1024>>.

1 Ответ

5 голосов
/ 23 мая 2011

Строка не может использоваться внутри двоичного выражения без преобразования. Вам необходимо преобразовать строку в двоичный файл, используя list_to_binary(S).

Я бы порекомендовал следующее выражение:

my_conv(S, Start, End) ->
    list_to_binary(<<Start:8, End:8>>, S]).

(Обратите внимание, что list_to_binary/1 фактически принимает глубокий список ввода-вывода, а не только чистую строку).

Если вы намереваетесь заполнить ваш двоичный файл до 1024 байтов (или 1040, включая ваши новые строки), вы можете сделать это позже:

my_conv(S, Start, End) ->
    pad(1040, list_to_binary(<<Start:8, End:8>>, S])).

pad(Width, Binary) ->
    case Width = byte_size(Binary) of
        N when N =< 0 -> Binary;
        N -> <<Binary/binary, 0:(N*8)>>
    end.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...