2016-04-04 42 views
2

我需要將Int轉換的字符串導出爲二進制數據,所以我可以在微控制器中使用它。如何在ruby 2.2.4(Windows)中序列化和導出數據?

下面是部分代碼:

def save_hex 

text_hex = File.new("hex_#{@file_to_translate}.txt", "a+") 

@text_agreschar.each_with_index do |string_agreschar, index| 
    string_hex = '' 
    string_agreschar.each do |char_agreschar| 
    string_hex << char_agreschar.agres_code.to_i 
    end 
    text_hex.print(string_hex) 
    text_hex.puts('') 
end 
end 

我需要我的「string_hex」導出到一個二進制文件,而不是文字。

附言:我在Windows 7

回答

1

發展我不能完全肯定,如果這是你在找什麼,但是我相信你想要做的事像下面這樣:

def save_hex 

    text_hex = File.new("hex_#{@file_to_translate}.txt", "a+") 

    @text_agreschar.each do |string_agreschar| 
    string_hex = [] # create empty array instead of string 
    string_agreschar.each do |char_agreschar| 
     string_hex << char_agreschar.agres_code.to_i 
    end 
    text_hex.puts(string_hex.pack('L*')) # convert to "binary" string 
    end 
end 

數組方法pack('L*')會將string_hex數組中的每個(4字節)整數轉換爲一個單一的字符串,該字符串表示二進制格式的整數。

如果您需要8個字節的整數,您可以使用pack('Q*')。檢查this link以獲取其他可用格式。

下面是使用Array#pack的例子:

i = 1234567 

p(i.to_s(16)) 
#=> "12d687" 

p([i].pack('L*')) 
#=> "@\xE2\x01\x00" 

p([i].pack('L>*')) # force big-endian 
#=> "\x00\x12\xD6\x87" 

p([i].pack('L>*').unpack('C*')) # reverse the operation to read bytes 
#=> [0, 18, 214, 135] 
+0

太謝謝你了...問題解決了!那正是我所期待的。 –

相關問題