将整数放入ruby中的字符串中

时间:2012-07-24 20:53:24

标签: ruby

我想在套接字上发送文件,并且需要在前四个字节中传递它的长度。

以下是我想用C做的事情:

struct
{
  int lenght; //four bytes
  char msg[40];
}dataBuf;

write(fd, &databuf, sizeof(dataBuf))

如何将整数推送到套接字上,以便在另一端接收整数,而不是ASCII值?

我不想像“\x04\X03”那样对其进行硬编码,而我尝试使用pack(L*)进行硬编码。这只适用于数组,我没有办法将我的四字节整数分解为一个四字节数组。

2 个答案:

答案 0 :(得分:4)

尝试将整数放入数组中,然后使用pack。例如:

socket.write( [0xffff].pack("L") )

答案 1 :(得分:1)

查看BinData gem。

您的示例可能如下所示:

class DataBuf < BinData::Record
  uint32 :length
  array :msg, :initial_length => 40 do
    uint8
  end
end

io = File.open(...)
r = DataBuf.read(io)
puts "Data buffer is #{r.length} length and it has '#{r.msg}' message"

我不确定消息,你应该查看BinData文档的String部分。