2016-08-01 3 views
-2

10 비트 SDI 스트림을 받았는데, uint8_t *buffer에 저장되고 읽을 때 처음에는 제외하고 예상과 완전히 다른 값을 얻습니다.10Bit 버퍼를 8Bit에 매핑하십시오.

10Bit -> 00 0000 0001 | 00 0101 1010 → Hex : A5 10

8 비트 -> 0000 | 0000 0100 | 0101 1010 → 16 진수 : A5 40

올바르게 매핑하는 데 사용할 수있는 기능이 있습니까? (C++ 스타일)

존재하지 않는 경우 어떻게 구현합니까?

+0

10 비트 값은 '001 05A', 8 비트 값은 '04 5A ', 어떻게'A5 10 '과'A5 80 '을 얻을 수 있습니까? –

+0

* 올바르게 매핑하는 데 사용할 수있는 함수가 있습니까? (C++ 스타일) * 내가 아는 것은 아니다. 당신은 스스로를 써야 할 것 같습니다. 이 질문은 유사합니다 : http://stackoverflow.com/questions/11680248/reading-a-binary-file-bit-by-bit –

+0

예. 죄송합니다. 오른쪽에서 왼쪽으로 읽는 첫 번째 값은 스트림이 올바른 것이며, 물론 8Bit 값은 4가 아니라 8이 될 것입니다.하지만 문제는 변하지 않습니다. 반대 방향이라해도 잘못된 값을 읽습니다. 변환 할 함수가 있습니다. ? – mattobob

답변

0

기본적으로 fread()을 올바른 매개 변수와 함께 사용하여 정확하게 5 바이트, 즉 40 비트를 임시 버퍼로 읽어야합니다. 이 양은 입력 스트림의 전체 바이트 수와 출력 스트림의 전체 출력 바이트 수에 해당하므로 사용합니다.

그런 다음 왼쪽으로 사용하고 우측 이동 (<<>>)와 비트 마스크 (&)는 5 출력 바이트를 추출하고 uint8_t 버퍼에 넣어 수 있습니다.

관련 문제