Я энтузиаст Erlang и новичок в Erlang Prorammer.
Недавно мне пришлось столкнуться с проблемой обработки данных в Erlang. Поэтому я решил использовать NIF. У меня есть два списка пролистов, и я должен вернуть хэш-соединение двух пролистов на основе термина.
Чтобы реализовать это, я решил изучить бинарные манипуляции на C. Также я использую библиотеку nifpp (C++11), чтобы упростить процесс обучения. Источник: https://github.com/goertzenator/nifpp
Ниже приведен код, который я могу придумать для извлечения и копирования двоичного файла в другой ErlNifBinary, который хорошо документирован. Но я не могу им манипулировать.
ErlNifBinary ebin, bin_term;
nifpp::get_throws(env, argv[0], ebin); // Assigns ebin to the input binary
enif_alloc_binary(16, &bin_term); // Size of new binary
memcpy(bin_term.data, ebin.data, ebin.size); // Copying the contents of binary
У меня есть указатель на беззнаковый символ в bin_term.data. Как изменить содержимое в bin_term.data?
Кроме того, если я возвращаю существующий скопированный двоичный файл, я получаю разные выходные данные для одного и того же ввода и не равны вводу, учитывая тот факт, что я только что скопировал данные из ввода. return enif_make_binary(env, &bin_term);
В erlang REPL, если я выполняю функцию с параметрами ‹‹7>> или любым другим двоичным файлом, я получаю результаты как ‹‹7,127,128,29,0,0,0,0,1,0,0,0,24. ,1,0,0>> или несколько случайных динамических значений каждый раз. Может кто-нибудь указать, в чем ошибка в коде.