2012-04-02 4 views
1

4バイト配列のアンパック値を変換しようとしていますか?これはRubyでも可能ですか?Rubyを使用してアンパックされた配列を単一の値に変換する方法は?

私がb1 = b.unpack("N")と書いたのは、b1の印刷値は1です。

File.open('testfile','rb') do |file| 
file.read.scan(/(.{4})(.{4})(.{4})(.*\w)(.{8})/).each do |a,b,c,d,e| 
    if a == "cook" 
    puts "test1" 
    else 
    puts "test2" 
    end 
    puts "output1" 
    b1 = b.unpack("N") 
    puts "output2" 
    c1 = c.unpack("N") 
    puts "output3" 
    puts "output4" 
    puts "output5" 
end 
end 
+1

'b1'は配列です。 'to_i'はどういう意味ですか?もしそれを整数として使いたいのであれば、 'b1 [0]'を使う必要があります。 –

答えて

1

String#unpackは常に配列を返します: `

私のコードは、以下の指定された配列(NoMethodError):私は.to_iコンソールを使用して、いくつかの整数にB1を変換しようとするが、[118]のエラーtest.rb:13: undefined method to_i」をスローします、一つの値だけがあります場合でも:配列は、それが独自のライン上の各値のto_sバージョンを出力するときにputsので

irb:01> s = "\x0\x0\x0*" 
#=> "\u0000\u0000\u0000*" 

irb:02> v = s.unpack('N') 
#=> [42] 

irb:03> v.class 
#=> Array 

あなたは混乱しています。 は、単一の番号のようにに見えるこの場合:print文を通して、あなたのプログラムをデバッグするとき、それの出力は、ソースコードに類似とするように設計されている将来的には

irb:04> puts v 
#=> 42 

irb:05> puts [1,2,3] 
#=> 1 
#=> 2 
#=> 3 

、、、代わりにputspを使用明確にする:

irb:12> puts 42, "42", [42] 
#=> 42 
#=> 42 
#=> 42 

irb:13> p 42, "42", [42] 
#=> 42 
#=> "42" 
#=> [42] 

@Daveはコメントとして、あなたが本当に整数としてそれを使用する配列から整数を抽出する必要があります。

irb:06> i = v.first # or v[0] 
#=> 42 

irb:07> i.class 
#=> Fixnum 
関連する問題