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所需的缓冲区空间。
返回大小(以字节为单位)。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com