1

4 バイト配列のアンパック値を変換しようとしていますか? これはRubyで可能ですか?

私が書いたb1 = b.unpack("N")と言って、どの値が であるかを出力b11ます。しかし、.to_i コンソールを使用して b1 を整数に変換しようとすると、エラーtest.rb:13: undefined methodto_i' for [118]:Array (NoMethodError)`がスローされます

私のコードは次のとおりです。

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
4

1 に答える 1

1

String#unpack値が 1 つしかない場合でも、常に配列を返します。

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

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

irb:03> v.class
#=> Array

puts配列を作成するとto_s、各値のバージョンがそれぞれの行に出力されるため、混乱します。この場合、それは単一の数字のように見えます:

irb:04> puts v
#=> 42

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

将来、print ステートメントを使用してプログラムをデバッグする場合は、出力がソース コードに似ており、明確になるように設計されているため、p代わりに を使用します。puts

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
于 2012-04-02T12:31:58.027 に答える