JPG 또는 MP4 파일의 이진 Blob 헤더가 있습니다. 나는이 둘을 구별하려고 노력하고있다.Ruby에서 바이트 비교
파일이 JPG 인 경우 처음 두 바이트는 \xFF\xD8
입니다. 그러나 비교를 blob[0] == "\xFF"
으로 만들면 실패합니다. 사실을 알고 있더라도 blob[0]
은 사실입니다. \xFF
이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
JPG 또는 MP4 파일의 이진 Blob 헤더가 있습니다. 나는이 둘을 구별하려고 노력하고있다.Ruby에서 바이트 비교
파일이 JPG 인 경우 처음 두 바이트는 \xFF\xD8
입니다. 그러나 비교를 blob[0] == "\xFF"
으로 만들면 실패합니다. 사실을 알고 있더라도 blob[0]
은 사실입니다. \xFF
이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
인코딩 문제입니다. 당신은 UTF-8로 인코딩 된 문자열을 바이너리 인코딩 (당신의 JPEG의 BLOB) ("\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과 비교할 수 있습니다.
고마워, 내가 필요로하는 것. – Brennan
좋아, 그래서 루비는''' "\ xFF"''를 인쇄 할 때만 이진 인코딩으로 바꾼다. 내 솔루션은 강제 인코딩 방법을 사용하는 것이 었습니다 : ''' "\ xFF".force_encoding ("BINARY") == blob [0]''' – Brennan
0xff와 0xd8은 비트가 아니며 바이트입니다. 그들 사이의 중요한 차이. 코드를 개발할 때 올바른 용어를 사용하는 것이 좋습니다. –
예, 답변을 시도하고 기다려야한다고 말했습니다. @theTinMan, 와우 웁스. 나는 조금 (하) 개발했고 그것을 알고 있었다. 긴 하루였습니다 – Brennan