2012-07-14 4 views
0

내가 4 바이트 있기 때문에이의 ID3v2.3 태그에 대한 정리있어, 그러나 여기 프레임의 헤더 태그는 3 바이트의 총이다,하지 4. 보인다 즉 의미합니다 그것에서 int을 얻으려고.ID3v2.2 MP3 태그에서 프레임 크기를 얻는 방법은 무엇입니까? 내가 <code>struct.unpack</code>을 사용할 수 없습니다

예를 들어, 내가 지금 사용하고있는 태그는 다음과 같습니다. TT2\x00\x00\x0c\x00Torn Within 여기서 TT2은 이름 식별자이고 \x00\x00\x0c은 크기 식별자입니다. 태그의 내용은 1237 바이트 인 \x00Torn Within입니다.

여기뿐만 아니라 노래의 ID3 헤더입니다. 'ID3\x02\x00\x00\x00\x04NP', 인코딩 및 플래그가 설정되지 않은 것을 볼 수 있습니다.

나는 struct.unpack('>3b', '\x00\x00\x0c')을 시도했지만 만 챙기고 각 바이트의 값했습니다. 내가 크기 태그에 \x00 앞에 추가하지 않는 한, 내가 계속할 수 없습니다이기 때문에

그러나 그 이후

, 나는 붙어입니다. 나는 무엇을해야합니까? 여기

http://docs.python.org/library/struct.html#format-characters

편집 내가이 할 수있는 struct 모듈의 ID3 태그 문서 http://id3.org/id3v2-00 및 문서입니다 : int(binascii.hexlify('\x00\x00\x0c'), 16)을하지만 난 그 훌륭한 솔루션

+0

언제나 '\ x00' 널 바이트를 붙일 수 있습니다 .. –

+0

@MartijnPieters 나는 똑같은 생각을했습니다.하지만 태그가 실제로 커지면 그게 어떤 영향을 미치는지 확실하지 않았습니다. 그것은 고용 이미지 또는 무언가를 들고 있었다. 그게 문제가되지 않을 것이라고 생각합니까? – TankorSmash

+0

3 바이트 필드의 크기는, 당신의 널 패딩 그 변경하지 않을 제한합니다. 16777216 바이트는 MP3 태그에 충분합니다. –

답변

1

생각하지 않습니다 포장을 풀기 전에 널 바이트 (\x00)를 붙이면됩니다.

>>> length = "\x00\x00\x0c" 
>>> struct.unpack('>I', '\x00' + length) 
(12,) 

null 바이트는 의미를 변경하지 않고 length 바이트를 4 바이트로 채 웁니다. 3 바이트의 크기를 유지할 수있는 최대 값은 24 2 16777216 바이트와 동일하다; 패딩을 추가하는 것은 어떤 식 으로든 한계를 변경하지 않을 것입니다.

+0

나에게 좋은 소리. 감사합니다 – TankorSmash

+0

그래, 내 실수; 고쳤다. –