2009-06-02 131 views
25

是否有像我们在C/C++中那样将二进制数据写入二进制文件的简单方法?例如,如何在不使用花式数学的情况下创建一个带有序列化4字节整数值的4字节文件?在Ruby中写入二进制文件

回答

29

您可以使用Array#packString#unpack转换为和来自二进制表示。将它们与IO#writeIO#read结合起来,然后离开。

+0

是的,我认为你是这个问题的更好答案! +1 – 2009-06-02 21:18:29

+0

感谢您的回答,这对我有效。 – 2009-06-03 16:17:07

3

还有Marshal.dumpMarshal.load您可以使用的方法。

以下是链接:http://en.wikipedia.org/wiki/Serialization#Ruby

而另一个将数据保存到文件:http://rubylearning.com/satishtalim/object_serialization.html

+0

这工作正常,但我仍然无法使用这个4字节的文件:File.open('test.bin','wb'){| file |文件“Marshal.dump(12345)},我得到6字节的文件。问题是我需要创建一个专有格式的二进制文件,这个文件由记录组成,每个文件都是固定长度的C型记录,整数,字节等。 感谢您真正快速的回答。 – 2009-06-02 21:13:26

+0

不用担心。 Pesto的答案看起来很有希望。 – 2009-06-02 21:39:22

0

在我卑微的看法中,ruby并不是为这样的任务而设计的。如果你必须写很多的二进制文件,最简单的方法是编写一些c函数,并从ruby中调用它们,这很容易使用swig。我现在正在做同样的事情来编写一个raid模拟器。

21

我最近有一个类似的工作问题。我用了BinData宝石,它工作得很好。 你只是这样做:

File.open('test.bin', 'wb') {|file| BinData::Int32be.new(12345).write(file) } 

,你不需要记住任何Array#pack代码。