6

ei_get_type()ei )を使用しようとしていますが、「type」フィールドが文書化されている場所を見つけるのに問題があります。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」パッケージで使用される他の「定数」があります。

4

2 に答える 2

3

Erlangの残りのcコード(odbcserver.c、show_msg.c)によると、これは値を比較する必要があるものです。

どうやらこれらは要素のタイプをマークするために外部バイナリフォーマットによって使用されるバイト値であり、putget.hのget8マクロは単にこの値を返します。

于 2009-09-28T18:23:11.940 に答える
0

私はここ数ヶ月からeiを使ってcnodeからerlang用語をエンコード/デコードしてきましたが、あなたが言及した定数は問題ないようです。私が使用しているものは次のとおりです。

長い->

ATOM-> d

タプル->h

EMPTY_LIST-> j

文字列->k

リスト->l

バイナリ->m

私が解析しなければならない種類のメッセージでは、私はこれらのタイプのみを受け取ります。

于 2009-09-29T19:34:49.700 に答える