erlang: ei_get_type() :其中是“类型”定义的常量;场地?

发布于 2024-08-06 05:17:49 字数 971 浏览 5 评论 0原文

我正在尝试使用 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() 的原型具有 *int ** 作为类型字段,而 ei.h 文件定义了上面的 char常数。

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

I am trying to use ei_get_type() (ei) but I am having trouble finding where the 'type' field is documented. I've looked in ei.h but all I could find was a list of constants starting with "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'

Is this the correct list? I am unsure because the prototype of er_get_type() has *int ** for the type field whereas the ei.h file defines char the above constants.

NOTE: There are other 'constants' used in the 'erl_interface' package that aren't listed here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

朱染 2024-08-13 05:17:49

根据 Erlang 中的其余 c 代码(odbcserver.c、show_msg.c),您应该将其与该值进行比较。

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

According to the rest of the c codes in Erlang (odbcserver.c, show_msg.c) this is what you should compare the value to.

Apparently these are the byte values used by the external binary format to mark the types of elements, and the get8 macro in putget.h simply returns this value.

咆哮 2024-08-13 05:17:49

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

LONG ->一个

原子-> d

元组 -> h

EMPTY_LIST ->; j

字符串 -> k

列表 -> l

二进制-> m

在我必须解析的消息类型中,我只接收这些类型。

I'd been using ei to encode/decode erlang terms from a cnode from a couple of months now, and the constants you mention seems OK. The ones I'm using are:

LONG -> a

ATOM -> d

TUPLE -> h

EMPTY_LIST -> j

STRING -> k

LIST -> l

BINARY -> m

in the kind of messages I've to parse, I only receive these types.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文