我想在套接字上发送文件,并且需要在前四个字节中传递它的长度。
以下是我想用C做的事情:
struct
{
int lenght; //four bytes
char msg[40];
}dataBuf;
write(fd, &databuf, sizeof(dataBuf))
如何将整数推送到套接字上,以便在另一端接收整数,而不是ASCII值?
我不想像“\x04\X03
”那样对其进行硬编码,而我尝试使用pack(L*)
进行硬编码。这只适用于数组,我没有办法将我的四字节整数分解为一个四字节数组。
答案 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部分。