2009-09-28 24 views
4

我正在嘗試使用ei_get_type()ei),但我無法找到'type'字段的記錄位置。我查看了ei.h但我能找到的是一個以「ERL_」開頭的常量列表。erlang:ei_get_type():其中是「類型」字段的已定義常量?

#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'包中還有其他'常量'在這裏沒有列出。

回答

2

根據Erlang中其餘的c代碼(odbcserver.c,show_msg.c),這是你應該比較的值。

顯然這些是外部二進制格式用於標記元素類型的字節值,putget.h中的get8宏只是返回該值。

+0

「SMALL_TUPLE」和「LARGE_TUPLE」之間的區別是什麼? – jldupont 2009-09-28 20:12:01

+0

什麼是「SMALL_INTEGER」? 16位? 「LARGE_BIG」怎麼樣? – jldupont 2009-09-28 20:12:39

0

我一直在用ei來編碼/解碼erode中的erlang,現在幾個月了,而且你提到的常量似乎還行。我使用的是:

LONG - >一個

ATOM - > d

TUPLE - >ħ

EMPTY_LIST - >Ĵ

STRING - >ķ

LIST - > l

BINARY - > m

在我要解析的消息類型中,我只接收這些類型。

相關問題