Considering all variables integers, here is an example how to play with records:<br><br>1. Record definition:<br>-record(tdm_leg,{a,b}).<br>-record(semper_packet_t,{tdm_leg = #tdm_leg{},ip_leg}).<br>-define(SEPARATOR,"--/--").<br>
<br>2. Inserting values:<br>insert_values(A,B,C) -><br>     Semper_packet_t = #semper_packet_t{#tdm_leg{a=A,b=B},ip_leg=C}.<br><br>3. Read values:<br>read_values(Semper_packet_t = #semper{Tdm_leg = tdm_leg#tdm_leg{a=A,b=B},ip_leg=C}) -><br>
     do_something_with(Semper_packet_t,Tdm_leg,A,B,C).<br><br>4. Encoder:<br>encode(#semper{#tdm_leg{a=A,b=B},ip_leg=C}) -><br>    list_to_binary(io_lib:format("~p~s~p~s~p",[A,?SEPARATOR,B,?SEPARATOR,C])).<br>
<br>5. Decoder:<br>decode(Binary) -><br>    [A,B,C] = re:split(binary_to_list(Binary),?SEPARATOR,[{return,list}]),<br>    Semper_packet_t = #semper_packet_t{#tdm_leg{a=list_to_integer(A),b=list_to_interger(B)},ip_leg=list_to_integer(C)}.<br>
<br>6. Binary tester:<br>is_my_record(Binary) -><br>    L = re:split(binary_to_list(Binary),?SEPARATOR,[{return,list}]),<br>    if length(L) == 3 -> Result = lists:all(fun(E) -> TL = string:join(string:tokens(E,"0123456789"),""), if length(TL) == 0 -> Result = true; length(TL) /= 0 -> Result = false end, Result end,L),<br>
       length(L) /= 3 -> Result = false,<br>    end,<br>    Result.<br><br>7. How to use the test:<br>receive_function(Packet) when is_my_record(Packet) == true -> do_something_with_my_packet;<br>receive_function(Packet) when is_my_record(Packet) /= true -> I_do_not_care.<br>
<br>Take this an example only. There are other options more elegant. For the moment I created something which is easily understandable for someone coming from other programming languages.<br><br>Have fun with Erlang! ;)<br>
CGS<br><br><br><br><br><br><br><div class="gmail_quote">On Mon, Sep 19, 2011 at 7:39 AM, Masklinn <span dir="ltr"><<a href="mailto:masklinn@masklinn.net">masklinn@masklinn.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On 19 sept. 2011, at 07:09, Jovi Zhang <<a href="mailto:bookjovi@gmail.com">bookjovi@gmail.com</a>> wrote:<br>
> But how to change record format to binary correctly? because the<br>
> binary need to transport in network.<br>
> When I try below, the output seems wrong.<br>
><br>
> -record(semper_packet_t,<br>
>    {tdm_leg = <<1:8, 3:8>>,<br>
>     ip_leg = 2<br>
>     }).<br>
><br>
> term_to_binary(#semper_packet_t.tdm_leg)<br>
><br>
> result: <<131,97,2>><br>
</div>you need an encoder and a decoder, to and from your binary wire format. You don't generally put raw binary data in a record, and there is just about no way erlang's binary packing of its terms (which exists for e<->e exchanges) is going to match a struct defined by an arbitrary third party.<br>

<div><div></div><div class="h5">_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br>