2015-01-17 3 views
1

C에서는 비트 수준에서 데이터를 저장하는 데 사용하는 char 배열이 있습니다. 이러한 배열을 파일에 저장 한 다음 다른 아키텍처의 컴퓨터에서 읽습니다. 내 질문은 비트의 순서가 일관성이 보장됩니다면입니까? 예를 들어 첫 번째 바이트에 "10010011"을 저장하면 인접한 1은 항상 2^0 및 2^1 위치에 있도록 읽혀지며 2^7 및 2^6 비트로 해석 될 수 있습니다 ?C 바이너리 파일의 비트 엔디안 및 이식성

편집 : 나중에이 페이지를 읽는 사람들을 위해이 질문을 조금 분명히하고 싶습니다. 바이트 엔디안은 멀티 바이트 객체의 바이트 순서이지만, 주어진 바이트의 비트가 신경 쓰입니다. 바이트가 디스크에 저장되면 (일반적으로) 8 비트의 순서로 저장됩니다. 나는 하드웨어 전문가가 아니지만, 어떻게 든 그걸 내려야 만합니다. 그래서, 내 관심사는 바이트가 저장되는 방식으로 모든 기계가 원래의 부호없는 char 값을 읽을 수 있도록하는 경우 또는 3 대 1의 기계가 192 대 다른 것인가에 관한 것입니다. 나는 비트가 어떻게 든 뒤섞이는 것을 우려하고있다. 분명히, 이것은 내가 선택한 답과 아래의 의견들 중 하나에 따라 걱정이되지 않습니다. 감사.

+0

C는 바이트의 크기를 보장하려고하지 않는다는 것을 알고 있기를 바랍니다. 적어도 8 비트가되어야한다고 말하기는 커녕, 8 비트 바이트를 싫어하는 아키텍처에 대한 양보로서 그게 많이 ... – Deduplicator

+0

경고를 주셔서 감사합니다, 나는 적어도 8 비트의 보장에 의존하므로, 높은 순서의 비트가있는 경우 문제가 발생하지 않아야합니다. – Jack

+1

8-bit-char (모든것이 현대적인 것으로, 2의 큰 출력을 사용하는 예외는 거의없는) 아키텍처에 자신을 제한하는 경우, 'unsigned char'을 읽고 쓰는 것을 제한하고 수동으로 (de-)보다 복잡한 모든 것을 직렬화합니다. 더 많은 보장은 일을 더 쉽고 빠르게 만들 것입니다 ... – Deduplicator

답변

1

간단한 대답 :

비트는 여전히 올바른 순서로 표시됩니다.

% c와 같은 형식 변환 (예 : % d)을 수행하는 경우 읽기 아키텍처의 엔디안이 바이트 순서를 결정합니다. 각 바이트 내의 비트는 여전히 동일합니다.

+0

'% d'는이 상황에서 아무것도 의미하지 않습니다. OP가 이것을 사용하여 숫자 값을 인쇄 가능한 표현으로 변환하면 엔디안이 그림에서 완전히 제거됩니다 ("텍스트 표현 호환성"으로 바뀌어도 비슷한 문제입니다). – usr2564301

0

엔디안은 약 바이트가 아닌 바이트 순서입니다. 따라서 little-endian 시스템의 00001101은 big-endian 시스템에서 동일합니다. 그러나 다른 기계에서 비트의 순서에 대해 지금해야 할 일이 있습니다. 비트는 노조의 순서가 바뀐다. 유니온을 사용하려는 경우 this을 읽어 엔디안이 비트 필드 패킹에 미치는 영향을 파악하십시오.

0

당신이 물어 보려는 개념은 bit-numbering or bit endianness으로 알려져 있으며 시스템 아키텍처는 최소 또는 최상위 비트 (MSB, LSB) 순서라고합니다.

내가 아는 한 참조는 항상 0 번째 또는 첫 번째 비트 위치를 기준으로합니다.

단일 바이트 8 비트 바이트 또는 8 진수와 관련하여 바이트 값이 0x93 (십진수 147)으로 간주되도록 이식 가능합니다. 0 번째 비트가 LSB 표현으로 비트 문자열을 작성한다고 가정하면 일반적으로 영어와 같은 왼쪽에서 오른쪽 자연 언어 사용자가 수행하는 것처럼 오른쪽 끝 비트 (리틀 엔디안 프로세서의 경우 표준)입니다.