如何使用ei_decode_term进行解码
how to use ei_decode_term to decode.
我有一个c++代码,它从erlang进程接收数据。我得到了一个元组,使用ei_decode_tuple_header/4,我得到了列表的arity,然后使用for循环遍历元组的元素,并像这样解码它们中的每一个:
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,但文档太糟糕了,我不知道怎么做?
有人能帮忙吗!感谢@
你尝试过ei_decode_ei_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) {
ei_term term;
int res = ei_decode_ei_term(buff, &index, &term);
if (res == 0) {
cout << "Success" << endl;
} else {
cout << "Fail" << endl;
}
cout << "The decoded data is " << term.value << endl;
}
}
ei_term的定义如下:
typedef struct {
char ei_type;
int arity;
int size;
union {
long i_val;
double d_val;
char atom_name[MAXATOMLEN_UTF8];
erlang_pid pid;
erlang_port port;
erlang_ref ref;
} value;
} ei_term;
因此,您可能需要检查term.ei_type
以更好地解析
相关文章:
- 无法解码base64+deflate数据
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 使用已使用 java 编码的 openssl 解码数据
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 从原始字节解码协议缓冲区(以 C++为单位)
- FFmpeg——使用硬件加速进行视频解码
- 如何从WIC解码器确定自上而下/自下而上?
- 使用公钥加密消息:BER 解码错误
- 在CRC-16 CCITT中将数据从二进制解码为文本,我应该输入一个码字,使用CRC生成器进行编码
- 在 GLFW 窗口中显示 FFMPEG 解码帧
- 如何将 MJPEG 解码为原始 RGB(或 YUV)数据
- 编译时 Base64 解码 C++
- 解码H264流时如何跳过帧?
- 无法在 HEVC 解码器上设置输出类型 IMFTransform
- pyserial arduino 字节阵列解码问题
- 将帧从 h264 流解码到 OpenCV Mat
- 连接无线电流和 MP3 解码器
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- h264_cuvid编解码器未找到