Я только начал экспериментировать с Erlang NIFS и застрял с этой проблемой, и мне интересно, можно ли что-нибудь с этим сделать.
Вот NIF:
#include "erl_nif.h"
static ERL_NIF_TERM test_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
ErlNifBinary binary;
if (!enif_inspect_iolist_as_binary(env, argv[0], &binary)) {
return enif_make_badarg(env);
}
printf("%s\n", binary.data);
return enif_make_int(env, 0);
}
static ErlNifFunc nif_funcs[] = {
{"test", 1, test_nif}
};
ERL_NIF_INIT(nif_test, nif_funcs, NULL, NULL, NULL, NULL)
и некоторые выводит, когда я вызываю функцию из erlang:
nif_test:test(<<"helló">>). % hell?
nif_test:test(<<"áéíóöőüű">>). % ?????Q?q
nif_test:test("hello"). % helloErlU?
nif_test:test(""). % xc?
nif_test:test("out"). % outg", "U?
Было бы неплохо получить хотя бы двоичные строки для правильной работы. Любые идеи?
Редактировать: Я забыл, что на самом деле мне нужны данные в виде строки (char *
) в программе C, так что я мог бы начать все это неправильно.