在Ruby中比较字节

在Ruby中比较字节,ruby,image-processing,binary,Ruby,Image Processing,Binary,我有一个JPG或MP4文件的二进制blob头。我试图区分这两者 当文件为JPG时,前两个字节为\xFF\xD8。但是,当我进行比较时,blob[0]=“\xFF”,它失败了。即使我知道blob[0]实际上是\xFF 最好的方法是什么 这是一个编码问题。您正在将二进制编码的字符串(JPEG blob)与UTF-8编码的字符串(“\xFF”)进行比较: 有几种方法可以创建二进制编码字符串: str = "\xFF\xD8".b # => "\xF

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

当文件为JPG时,前两个字节为
\xFF\xD8
。但是,当我进行比较时,
blob[0]=“\xFF”
,它失败了。即使我知道
blob[0]
实际上是
\xFF


最好的方法是什么

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

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

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>
str=“\xFF\xD8.b#=>”\xFF\xD8”(Ruby 2.x)
str.encoding#=>#
str=“\xFF\xD8”.force_编码(“二进制”)#=>“\xFF\xD8”
str.encoding#=>#
str=0xFF.chr+0xD8.chr#=>“\xFF\xD8”
str.encoding#=>#
str=[“FFD8”].pack(“H*”)#=>“\xFF\xD8”
str.encoding#=>#

以上所有内容都可以与blob进行比较。

好的,因此Ruby仅在打印时将
“\xFF”
更改为二进制编码。我的解决方案是使用强制编码方法:
“\xFF”。强制编码(“二进制”)==blob[0]
0xff和0xd8不是位,而是字节,它们之间存在显著差异。如果您正在开发代码,最好使用正确的术语。您是否尝试过
blob[0]='\xFF'.ord
或只是
blob[0]==0xFF
?@mbratch:我想您的意思是
“\xFF”.ord
,它与
0xFF
255
@Borodin完全相同,是的。谢谢,谢谢,正是我需要的
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>