2012-07-04 3 views
3

Я пишу код Erlang, который в основном принимает некоторые двоичные данные из TCP-соединения, а затем использует C nif для дешифрования данных и возврата дешифрованных данных.Передача двоичного файла erlang nif

Проблема в том, что я не могу понять, как изменить переданный в двоичном формате.

Это функция, которую я использую. Если кто-то может указать мне в правильном направлении, я был бы признателен.

static ERL_NIF_TERM decrypt(ErlNifEnv* env, ErlNifBinary *data); 

Спасибо!

+6

Вы уверены, что _modifying_ двоичный код является правильным подходом? Я понимаю, что двоичные файлы могут объединяться в виртуальную машину, а изменение одного двоичного файла может фактически изменить «несвязанные» данные. Почему бы не вернуть новый двоичный файл? – sarnold

ответ

3

Вы не можете изменить пройденный двоичный код. Вам необходимо, чтобы сначала скопировали копию и изменили скопированный двоичный файл, а затем вернули скопированный (= измененный) двоичный код обратно вызывающему.

Помните, что двоичный код выделяется в общей куче; если вы перезапишете оригинал, у вас будут проблемы, потому что это нарушает принцип одиночного присвоения Erlang.

Для получения более подробной информации см. an example of handling binary arguments in sfmt-erlang NIF code.

Смежные вопросы