2009-09-05 2 views
0

NSData를 사용하여 SWF 파일의 헤더를 읽으려고합니다. 는 SWF 형식 사양에 따라 나는 영화의 폭과 높이를 읽는 비트가 아닌 바이트에 접근 할 필요가, 나는 통해Objective-C로 SWF 헤더 읽기

의 Obj-C에서 바이트 (9)을 할 수있는 방법을 찾을 수 없습니다 : 여기입니다 RECT (영화의 경계)를 저장했습니다. 이진 형식으로 읽어야합니다. 먼저, 첫 번째 바이트를 바이너리로 변환합니다 : "01100000" 첫 번째 5 비트는 각 저장된 값의 비트 단위 크기를 알려줍니다 : "01100"= 12 그래서 우리는 12 비트의 4 필드 = 48 비트 48 비트 +5 비트 (RECT의 헤더) = 53 비트 8의 배수에 도달 할 때까지 0으로 바이트를 채 웁니다. 53 비트 + 3 정렬 비트 = 56 비트 (이 RECT는 7 바이트 길이, 7 * 8 = 56) 나는이 모든 물건을 확인하려면이 공식을 사용

어디서부터 시작 할까?

답변

1

이미 원하는대로 호환되는 라이센스가있는 코드를 찾아보십시오. C 라이브러리는 Obj-C 코드를 링크 (또는 동적으로 링크되도록 정렬) 한 다음 함수를 호출하여 Obj-C 코드에서 사용할 수 있습니다.

오류가 발생하면 Binary Data Programming Guide for CocoaNSData Class Reference부터 살펴보십시오. 관심있는 비트가 포함 된 바이트를 추출한 다음 비트 마스크 기법을 사용하여 관심있는 비트를 추출해야합니다. Snow Leopard에 아직있는 경우 BitTst(), BitSet()BitClr() 함수와 그 친구가 유용 할 수 있습니다. 나는 그들이 탄소 (Carbon)의 모범적 인 부분에서 끝났는 지 아닌지 확신하지 못한다. 또한 Posix setbit(), clrbit(), isset()isclr() 매크로가 정의되어 있습니다. 마지막으로 C 비트 연산자가 ^, |, &, ~, <<>>입니다.

+0

iPhone 응용 프로그램의 경우 라이브러리에 동적으로 링크 할 수 없다는 점에 유의하십시오. –

2

ObjC는 C의 상위 집합입니다. 문제없이 ObjC와 함께 C 코드를 실행할 수 있습니다.

따라서 libming과 같은 C 기반 라이브러리를 사용하여 SWF 파일에서 바이트를 읽을 수 있습니다.

NSData 개체로 바이트를 셔플해야하는 경우 -dataWithBytes:length: 메서드를 살펴보십시오.

+0

방금 ​​SWF 헤더를 읽는 또 다른 C 프로그램을 찾았습니다. 문제없이 컴파일 할 수 있습니다. 이제 순수 C를 Obj-C 응용 프로그램과 섞는 방법을 알아 내려고합니다. – goo

관련 문제