比较Ruby中的字节

Bre*_*nan 2 ruby binary image-processing

我有一个JPG或MP4文件的二进制blob头.我试图区分这两者.

当文件是JPG时,前两个字节是\xFF\xD8.但是,当我进行比较时blob[0] == "\xFF",它失败了.即使我知道blob[0]IS实际上也是如此\xFF

做这个的最好方式是什么?

Ste*_*fan 6

这是一个编码问题.您正在将具有二进制编码的字符串(您的JPEG blob)与UTF-8编码的字符串("\xFF")进行比较:

foo = "\xFF".force_encoding("BINARY") # like your blob
bar = "\xFF"
p foo         # => "\xFF"
p bar         # => "\xFF"
p foo == bar  # => false
Run Code Online (Sandbox Code Playgroud)

有几种方法可以创建二进制编码的字符串:

str = "\xFF\xD8".b                         # => "\xFF\xD8"  (Ruby 2.x)
str.encoding                               # => #<Encoding:ASCII-8BIT>

str = "\xFF\xD8".force_encoding("BINARY")  # => "\xFF\xD8"
str.encoding                               # => #<Encoding:ASCII-8BIT>

str = 0xFF.chr + 0xD8.chr                  # => "\xFF\xD8"
str.encoding                               # => #<Encoding:ASCII-8BIT>

str = ["FFD8"].pack("H*")                  # => "\xFF\xD8"
str.encoding                               # => #<Encoding:ASCII-8BIT>
Run Code Online (Sandbox Code Playgroud)

以上所有内容都可以与你的blob进行比较.