我有一个 JPG 或 MP4 文件的二进制 blob header 。我试图区分两者。
当文件为 JPG 时,前两个字节为 \xFF\xD8
。但是,当我进行比较 blob[0] == "\xFF"
时,它失败了。即使我知道 blob[0]
实际上是 \xFF
最好的方法是什么?
最佳答案
这是一个编码问题。您正在将二进制编码的字符串(您的 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
有几种创建二进制编码字符串的方法:
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>
以上所有内容都可以与您的 blob 进行比较。
关于ruby - 比较 Ruby 中的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820907/