У меня есть код C++, который получает данные из процесса erlang. Я получаю кортеж и используя ei_decode_tuple_header/4, я получил Арность списка, а затем использовать для цикла, чтобы пройти через элементы кортежа и декодировать каждый из них, как это:как использовать ei_decode_term для декодирования.
void decode_tuple(char *buff) {
int index = 0;
int size;
int type;
int res = ei_decode_tuple_header(buff, &index, &size);
if(res == 0) {
cout<<"Success"<<endl;
} else {
cout<<"Fail"<<endl;
}
for(int i = 0; i < size; ++i) {
char *p = (char*)malloc(sizeof(char) * 1000);
int res = ei_decode_string(buff, &index, p);
if(res == 0) {
cout<<"Success"<<endl;
} else {
cout<<"Fail"<<endl;
}
cout<<"The decoded string is "<<p<<endl;
}
}
Однако, это работает отлично, когда все элементы в кортеже/списке имеют один и тот же тип. Я хотел бы расшифровать, каков бы ни был этот термин. Я знаю, что есть ei_decode_term, но документация настолько плоха, что я не мог понять, как это сделать?
Может ли кто-нибудь помочь! спасибо @
Спасибо @ rorra, term.value относится к объединению, которое будет содержать либо float, char, atom, pid, port. Если в случае, я даю кортеж формы, {"a", "b", "c", ["d", "e", "f"], {"g", "h"}}, что похоже, не подходит для использования ei_decode_ei_term. Я хотел бы, чтобы общее решение расшифровывало любые термины erlang и рекурсивно, если это вводит какой-либо другой составной термин. любые указатели? Спасибо за подробный ответ – root