나는 C#을 사용하여 이진 파일을 읽습니다. 파일 유형에 대한 명세에 따르면 바이트에 6 가지가 채워져 있다고합니다 [8]. 그러나 첫 번째 변수는 0-19 비트입니다. 두 번째 변수 20-39, 세 번째 40-59, 네 번째 60-62 및 63 비트는 부울입니다. 이 비트를 의미있는 데이터로 변환하려면 어떻게합니까? 이러한 모든 변수는 마지막 비트를 제외한 단위입니다.바이트 [8]에서 비트 [64] 파싱
답변
바이트가 귀하의 바이트라고 가정 해 봅시다 [8].
<<
왼쪽 피연산자의 비트를 이동 >>
:의는 그 바이트 말을하자 첫 번째 비트 (http://en.wikipedia.org/wiki/Endianness)
0 1 2 3 4 5 6 7
11111111 11111111 11112222 22222222 22222222 33333333 33333333 3333444B
int first = bytes[0] << 12 + bytes[1] << 4 + (bytes[2] >> 4)&0xF;
int second = (bytes[2]&0xF) << 16 + bytes[3] << 8 + bytes[4];
int third = bytes[5] << 12 + bytes[6] << 4 + (bytes[7] >> 4)&0xF;
int fourth = (bytes[7] >> 1)&0x8;
bool flag = bytes[7]&0x1 == 1 ? true : false;
은 기본적으로 우리가 여기에서 두 가지 작업이 가장 중요하다 즉, 빅 엔디안 오른쪽 피연산자의 비트 수만큼 왼쪽 또는 오른쪽으로. 따라서 00101101 >> 4 = 00000010
및 00101101 << 4 = 11010000
&0x?
은 비트 마스크입니다. &은 모든 비트 쌍을 비교하며, 두 비트가 모두 1 인 경우에만 결과가 1이고 그렇지 않으면 0입니다. 마스크의 1은 전파가 허용되고 나머지는 지워집니다. 00101101&0xF = 00001101
및 00101101&0x1 = 00000001
바이트 리틀 엔디안 인 경우 http://msdn.microsoft.com/en-us/library/6a71f45d(v=vs.71).aspx
것은 다음 비트 만지작가 다를 수 :
여기에 대한 C# 연산자를 읽고 (주 0xF입니다는 00,001,111이며, 0x1로는 00000001입니다).
오 와우 감사합니다. 나는 처음에 int = (bytes [0] | bytes [1] >> 8) | (bytes [2] >> 16)) & 1048575; 그러나 당신의 말이 더 의미가 있습니다! – user2383945
@ user2383945'bytes'의 비트 패킹이 당신이 생각하는 것인지 확인하십시오. 그렇지 않으면 논리가 달라집니다. – Patashu
그래, 아직도 문제가있어 리틀 엔디안으로해야하기 때문에 문제라고 생각해. 비트를 뒤집어 야합니까? – user2383945
- 1. 64 비트 플랫폼에서 4 바이트 포인터?
- 2. 64 비트 호환 모드 대신 64 비트 모드를 실행하는 MASM64
- 3. 바이트 배열을 32 비트 및 64 비트 부동으로 변환 하시겠습니까?
- 4. 바이트 열거 형을 파싱
- 5. 비트 배열의 분할 바이트 배열
- 6. 이클립스 주노 64 비트 충돌 64 비트
- 7. 64 비트 Java 및 64 비트 액세스
- 8. Windows 8에서 jdk를 설치하지 못했습니다. 64 비트 OS
- 9. 오류 Aptana Studio, Windows 8에서 열 수 없음 64 비트
- 10. 64 비트 컴퓨터의 strtok
- 11. C에서 64 비트 64 비트 읽기 및 쓰기
- 12. C 64 비트 포인터 정렬
- 13. 64 비트 Java 응용 프로그램 : 64 비트 OS, 64 비트 JRE 및 64 비트 응용 프로그램이 필요합니까?
- 14. 32 비트 및 64 비트 프로세스에서 작동해야하는 64 비트 라이브러리
- 15. 0 바이트 시프트 비트
- 16. Perl에서 비트 문자열 파싱
- 17. 64 비트 컴퓨터에서 구조체 정렬
- 18. 64 비트 시스템에서 메모리 할당
- 19. 32 비트 64 비트 호환
- 20. 32 비트/64 비트 OS?
- 21. cmpxchg 64 비트 정수 예
- 22. 문자열에서 바이트 코드를 파싱 하시겠습니까?
- 23. 바이트 구조체를 C 구조체로 파싱
- 24. 64 비트 아키텍처 최적화
- 25. 비트 정렬 바이트 단위 바이트 정렬 버퍼
- 26. 어셈블리 곱하기 작업 64 비트
- 27. nasm 64 비트 푸시 qword?
- 28. 64 비트 시스템에서 64 비트 설치 프로그램을 사용하기위한 시작 조건
- 29. Win 7 (64 비트)에서 SAS 9.2 (64 비트) 성능
- 30. 32 비트 및 64 비트 시스템에서 항상 64 비트입니다.
리틀 엔디안 또는 빅 엔디안? – Patashu
Little Endian은 스펙에서 말하는 것입니다. – user2383945