在线文档教程

erl_marshal

erl_marshal

C库

erl_marshal

库摘要

Erlang术语的编码和解码。

描述

该模块包含用于将Erlang术语编码为一系列字节的功能,以及用于从一系列字节中解码Erlang术语的功能。

输出

int erl_compare_ext(bufp1, bufp2)

类型

比较两个编码术语。

  • bufp1包含编码的Erlang项的缓冲区。

  • bufp2包含编码的Erlang项的缓冲区。

如果项相等,则返回0;如果term1 <term2,则返回-1;如果term2 <term1,则返回1。

ETERM *erl_decode(bufp)ETERM *erl_decode_buf(bufpp)

类型

erl_decode()erl_decode_buf()解码缓冲区的内容并返回相应的Erlang项。erl_decode_buf()提供了一个简单的机制来处理缓冲区中连续存储的几个编码项。

  • bufp指向包含一个或多个编码Erlang项的缓冲区的指针。

  • bufpp是缓冲区指针的地址。 缓冲区包含一个或多个连续编码的Erlang术语。 在成功调用erl_decode_buf()之后,bufpp会更新,以便它指向下一个编码的术语。

erl_decode()在成功时返回对应于bufp内容的Erlang项,否则返回NULL。 erl_decode_buf()返回对应于bufpp中第一个连续项的Erlang项,并向前移动bufpp以指向缓冲区中的下一项。 失败时,每个函数都返回NULL。

int erl_encode(term, bufp)int erl_encode_buf(term, bufpp)

类型

erl_encode()erl_encode_buf()Erlang术语编码为外部格式进行存储或传输。erl_encode_buf()提供了一个简单的机制,用于在同一缓冲区中连续编码几个词语。

  • term是要编码的Erlang术语。

  • bufp指向包含一个或多个编码Erlang项的缓冲区的指针。

  • bufpp是指向包含一个或多个连续编码的Erlang项的缓冲区的指针。在成功调用erl_encode_buf()之后,bufpp被更新,以便它指向下一个编码术语的位置。这些函数返回成功时写入缓冲区的字节数,否则为0.注意没有边界检查完成缓冲。调用者的责任是确保缓冲区足够大以容纳编码项。您可以使用足够大的静态缓冲区来保存程序中所需的术语,也可以使用erl_term_len()来确定给定术语的确切要求。以下内容可帮助您估计术语的缓冲区要求。请注意,这些信息是特定于实现的,可以在将来的版本中更改。如果您不确定,请使用erl_term_len()。Erlang项用一个1字节的标记进行编码,该标记标识对象的类型,长度为2或4字节的字段,然后是数据本身。具体来说:元组需要5个字节,加上每个元素的空间。列表需要5个字节,加上每个元素的空间,并在结尾处为空列表添加1个字节。字符串和原子需要3个字节,每个字符加上1个字节(终止0不编码)。真正长的字符串(超过64k个字符)被编码为列表。原子不能包含超过256个字符。整数需要5个字节。字符(整数<256)需要2个字节。浮点数需要32个字节。 Pids需要10个字节,加上节点名称的空间,这是一个原子。端口和参考需要6个字节,加上节点名称的空间,这是一个原子。所需的总空间是根据上述信息计算的结果,再加上另外一个版本标识符的字节.int erl_ext_size(bufp)TypesReturn编码术语中的元素数。unsigned char erl_ext_type(bufp)TypesIdentifies并返回Erlang的类型长期编码在缓冲区中。它跳过一个尾随的魔法标识符。如果无法确定类型或返回下列其中一个,则返回0:

  • ERL_INTEGER

  • ERL_ATOM

  • ERL_PID (Erlang进程标识符)

  • ERL_PORT

  • ERL_REF (Erlang参考)

  • ERL_EMPTY_LIST

  • ERL_LIST

  • ERL_TUPLE

  • ERL_FLOAT

  • ERL_BINARY

  • ERL_FUNCTION

unsigned char *erl_peek_ext(bufp, pos)

类型

此函数用于在缓冲区中跨过一个或多个编码项,以直接访问后面的项。

  • bufp 是指向包含一个或多个编码的Erlang项的缓冲区的指针。

  • pos指示要在缓冲区中跳过多少项。

返回一个指向子项的指针,可以在稍后调用erl_decode()来检索该位置的项。 如果没有术语,或pos将超过缓冲区中术语的大小,则返回NULL。

int erl_term_len(t)

类型

如果通过erl_encode()将其编码为Erlang外部格式,则确定t所需的缓冲区空间。

返回大小(以字节为单位)。