6

我正在尝试使用ei_get_type() ( ei ),但我无法找到记录“类型”字段的位置。我查看了ei.h,但我能找到的只是一个以“ERL_”开头的常量列表。

#define ERL_SMALL_INTEGER_EXT 'a'
#define ERL_INTEGER_EXT       'b'
#define ERL_FLOAT_EXT         'c'
#define ERL_ATOM_EXT          'd'
#define ERL_REFERENCE_EXT     'e'
#define ERL_NEW_REFERENCE_EXT 'r'
#define ERL_PORT_EXT          'f'
#define ERL_PID_EXT           'g'
#define ERL_SMALL_TUPLE_EXT   'h'
#define ERL_LARGE_TUPLE_EXT   'i'
#define ERL_NIL_EXT           'j'
#define ERL_STRING_EXT        'k'
#define ERL_LIST_EXT          'l'
#define ERL_BINARY_EXT        'm'
#define ERL_SMALL_BIG_EXT     'n'
#define ERL_LARGE_BIG_EXT     'o'
#define ERL_NEW_FUN_EXT   'p'
#define ERL_FUN_EXT           'u'

这是正确的列表吗?我不确定,因为er_get_type()的原型对于 type 字段有 *int ** 而ei.h文件定义了char上述常量。

注意:“erl_interface”包中使用的其他“常量”未在此处列出。

4

2 回答 2

3

根据 Erlang 中的其他 c 代码(odbcserver.c,show_msg.c),这就是您应该比较该值的内容。

显然这些是外部二进制格式用来标记元素类型的字节值,putget.h 中的 get8 宏只是简单地返回这个值。

于 2009-09-28T18:23:11.940 回答
0

几个月以来,我一直在使用 ei 对来自 cnode 的 erlang 术语进行编码/解码,而您提到的常量似乎还可以。我正在使用的是:

长 -> 一个

原子-> d

元组-> h

EMPTY_LIST -> j

字符串-> k

列表-> l

二进制 -> 米

在我要解析的消息类型中,我只收到这些类型。

于 2009-09-29T19:34:49.700 回答