JPEGファイル検査をするときのように、あるファイルの特定の バイト列を比較するときの話。
やりたいのはこんな感じ。JPEGファイルは先頭2バイトが
0xFF, 0xD8 になっている。その先頭2バイトを IO.read で読んで
"\xFF\xD8"
と比較してもRuby 1.9はNG。
open("jpegfile", "r") do |j| magic = j.read(2) if magic == "\xFF\xD8" ... end end
がっくし。スクリプト自体がマルチバイトエンコーディングになってると
同じバイト列でも違うと判定される。
"\xFF\xD8".force_encoding("ascii-8bit")
とか
しないと、とか、I know, I know, but...
Ruby 1.8でも動くようにするにはどうすんの。短いの希望。
次のどちらかかな。
if magic.unpack('C*') == "\xFF\xD8".unpack("C*") then ... end if magic.bytes.to_a == "\xFF\xD8".bytes.to_a then ... end
面倒じゃのう。
Process.wait したあとで、$?.to_int
にアクセスすると
そこで動きが止まっちゃう。$?.to_i
ならだいじょぶ。
なじぇ。