2012-04-07 6 views
2

하나의 단일 비트를 이진 파일에 쓰고 싶습니다. binaryWriter.Write((bit)1);
같은BinaryWriter를 사용하여 단일 비트를 이진 파일로 작성하십시오.

using (FileStream fileStream = new FileStream(@"myfile.bin", FileMode.Create)) 
using (BinaryWriter binaryWriter = new BinaryWriter(fileStream)) 
{ 
    binaryWriter.Write((bool)10); 
} 

뭔가 내가 파일이 한 바이트를 가지고,하지만 난 하나 개의 비트를 작성하려는 binaryWriter.Write((bool)1)를 사용합니다. 이것이 가능한가?

+1

결과 파일의 길이가 1 바이트 이상이고 디스크에 많은 K를 할당합니다 (파일 시스템에 따라 다름) –

답변

3

파일에 1 비트만 저장할 수 없습니다. 거의 모든 최신 파일 시스템과 하드웨어는 8 비트, 일명 바이트 또는 옥텟 세그먼트로 데이터를 저장합니다.

파일에 비트 값을 저장하려면 1 또는 0을 바이트 (00000001 또는 00000000)로 저장하십시오.

+0

파일 시스템이 비트가 아닌 바이트로 생각하는 이유를 알고 있습니까? –

+0

여러 개의 비트를 하나의 값으로 그룹화하는 것이 별도로 처리하는 것보다 쉽기 때문에 생각합니다. 예를 들어, 01000001은 문자 'A'를 의미 할 수 있습니다. 파일 시스템뿐만 아니라 컴퓨터 내부의 거의 모든 것이 바이트 단위로 작동합니다. 단일 비트로 작업하는 것보다 간단합니다. –

8

아니요 단일 비트를 쓸 수 없습니다. 최소한 전체 바이트를 써야합니다. 만약 당신이 의 경우에이 단일 비트를 쓰고 싶다면 8 비트가 쓰기 (즉, 메모리에 대기) 할 때까지 기다린 다음 전체 바이트를 쓸 수 있습니다 (예 : 비트 시프트 등을 사용하여 이 비트들을 하나의 바이트에 결합). Wikipedia에서도

:

역사적으로, 바이트는 컴퓨터에 텍스트 한 문자 인코딩하는데 사용되는 비트 수이고 이러한 이유로 다양한 컴퓨터 아키텍처에서 기본 드레서 요소 .

0

비트만 쓰는 경우 8 비트를 단일 바이트로 혼합 할 수 있습니다. 그러나 단일 비트를 쓸 수 없습니다.

0

아마도 읽기/수정/쓰기로 할 수 있습니다. 왜 그런 짓을하고 싶니? 그것이 무엇이든, 다른 방법을 찾고, 비트를 바이트로 패킹하고, 부울 바이트를 읽고/쓰고, 비트로 다시 변환하고, ASCII '0'과 '1'을 사용하십시오.

+0

일부 데이터가 들어있는 바이너리 파일을 만들고 있는데 32 비트 데이터와 64 비트 데이터가 있기 때문에 각 레코드 앞에 1 또는 0을 쓰고 싶습니다. 파일을 읽을 때 0 또는 1로 표시되므로 64 또는 32 비트 값을 읽어야합니다. 희망이 내가 잘 설명 ... 편집 : 나는 이것을 할 수있는 가능한 가장 작은 데이터가 필요합니다. 이것이 내가 싱글 비트를 쓰는 이유입니다. – Hlavson

관련 문제