could anyone help me in the question, thanks?

S

Sonn Ygg

In network application, we need to fill some fields of protocol header
like below (in C):

struct hdr {
unsinged short ver;
unsinged char len;
unsinged char flg;
......
};

int main(void)
{
struct hdr hh;
hh.ver = 0x1;
hh.len = 0x2;
hh.flg = 0x3;
...
send(sock, &hh, sizeof(hh), 0);
...
}

How could I do above in Ruby because I don't find how to specify the
data type of variables or the address of variables in Ruby so far? I
will deeply appreciate if anyone gives me any hint about it? Thanks a
lot.
 
A

Alex Young

Sonn said:
In network application, we need to fill some fields of protocol header
like below (in C):

struct hdr {
unsinged short ver;
unsinged char len;
unsinged char flg;
......
};

int main(void)
{
struct hdr hh;
hh.ver = 0x1;
hh.len = 0x2;
hh.flg = 0x3;
...
send(sock, &hh, sizeof(hh), 0);
...
}

How could I do above in Ruby because I don't find how to specify the
data type of variables or the address of variables in Ruby so far? I
will deeply appreciate if anyone gives me any hint about it? Thanks a
lot.
You only need to worry about the types at the
serialisation/deserialisation interface, and you can do that with
Array#pack and String#unpack. There's also bitstruct at
http://raa.ruby-lang.org/project/bit-struct/ if your needs are more
complicated.
 
D

Daniel Martin

Sonn Ygg said:
How could I do above in Ruby because I don't find how to specify the
data type of variables or the address of variables in Ruby so far? I
will deeply appreciate if anyone gives me any hint about it? Thanks a
lot.

This is exactly the problem that Array.pack was designed to solve.
Quoting from a recent post of mine dealing with network headers in the
FSP protocol: (ruby-talk:256654)

fsp_string = [fsp_pkt.cmd, 0, fsp_pkt.key,
fsp_pkt.seq, fsp_pkt.len, fsp_pkt.pos].pack("CCnnnN")

Basically, make an array containing what you need, then use pack to
stuff it into a byte string with the proper width and alignment. Then
write that byte string to your socket.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top