ruby - 比较 Ruby 中的字节

标签 ruby image-processing binary

我有一个 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/

相关文章:

ruby-on-rails - 具有深度关联链的 FactoryGirl 的最佳实践?

ruby-on-rails - 为什么对 params 哈希进行切片会对批量分配造成安全问题?

css - 为什么这个 xpath 可以工作,但 UL 的 css 选择没有 [locator not found]

image-processing - 以编程方式确定数码照片可能的清晰度的方法?

algorithm - 生成所有长度为 n 并设置 k 位的二进制字符串

ruby-on-rails - 在 GET 请求中传递句号(句点)和正斜杠?

c++ - 强制 WIC 将图像数据视为 RGB

image - 获得 2 张图像的 (MSE) 平均误差平方是什么意思?

javascript - 为什么这些二进制表示会产生相同的数字?

java - 使用递归的二分搜索