C++에서 파일에 대한 비트 읽기 및 쓰기

Syed Hassan Sabeeh Kazmi 2023년10월12일
C++에서 파일에 대한 비트 읽기 및 쓰기

C++에서 텍스트 파일의 압축과 같은 프로세스는 비트를 읽고 파일에 써야 합니다. 이 자습서에서는 C++에서 오류 없이 파일에 비트를 읽거나 쓰는 방법을 배웁니다.

소멸자로서의 istreamostream은 파일에서 비트를 읽고 쓸 때 중요한 역할을 합니다.

그러나 Huffman 코딩에서 Huffman 트리를 통해 인코딩하는 동안 이진 출력 파일에 비트를 써야 할 수 있으며 스트림을 사용하는 대신 부울을 8비트 청크로 묶은 다음 바이트를 쓸 수 있습니다.

iStreamoStream을 사용하여 C++에서 파일에 대한 비트 읽기 및 쓰기

BitInputStream 클래스에는 비트를 읽고 쓰는 iStreamoStream 기능이 포함되어 있습니다. ifstreamofstream은 물리적 파일 이름에 스트림을 첨부하여 이진 파일을 열 수 있으므로 파일에서 비트를 읽거나 쓰는 데에도 중요합니다.

또한 대상 BitInputStream 클래스의 공개 멤버 함수는 공통적으로 설명되지 않은 인수(선택적 인수)를 제공할 수 있습니다.

ostreamn바이트가 메모리 위치에서 쓰여지고 n바이트 앞에 있는 포인터를 전송하는 열린 멤버 함수 중 하나입니다.

fstream 스트림 클래스는 파일에서 읽고 쓸 수 있기 때문에 다른 스트림 클래스보다 기능이 뛰어납니다.

파일 스트림이 바이너리 모드에서 열리기 때문에 바이너리에서 작업을 읽고 쓰는 것은 중요하지 않습니다. 대신 모든 형태의 읽기/쓰기 작업을 수행할 수 있습니다.

#include <fstream>
#include <iostream>  // reflects `istream` and `ostream`

// optional
using namespace std;

// struct declaration
struct army_per {
  // an entity that reflects three attributes
  int ref_no;
  string rank, name;
};

// primary class
int main() {
  // declaration of `ofstream` for read/write `army_per` file
  ofstream wf("army_per.dat", ios::out | ios::binary);

  if (!wf) {
    cout << "Unable to open the file!" << endl;
    return 1;
  }

  // entity declaration
  army_per soldier[2];

  // first entry
  soldier[0].ref_no = 1;
  soldier[0].name = "Rob";
  soldier[0].rank = "Captain";

  // second entry
  soldier[1].ref_no = 2;
  soldier[1].name = "Stannis";
  soldier[1].rank = "Major";

  for (int i = 0; i < 2; i++) wf.write((char *)&soldier[i], sizeof(army_per));

  wf.close();

  if (!wf.good()) {
    cout << "Error: bits writing time error!" << endl;
    return 1;
  }

  ifstream rf("army_per.dat", ios::out | ios::binary);

  if (!rf) {
    cout << "File is not found!" << endl;
    return 1;
  }

  army_per rstu[2];
  for (int i = 0; i < 2; i++) rf.read((char *)&rstu[i], sizeof(army_per));

  rf.close();

  if (!rf.good()) {
    cout << "Error: bits reading time error occured!" << endl;
    return 1;
  }

  cout << "Army Div-32 details:" << endl;

  for (int i = 0; i < 2; i++) {
    // access the elements of the object and output the result of each
    // individual
    cout << "Reference No: " << soldier[i].ref_no << endl;
    cout << "Name: " << soldier[i].name << endl;
    cout << "Rank: " << soldier[i].rank << endl;
    cout << endl;
  }
  return 0;
}

출력:

Army Div-32 details:
Reference No: 1
Name: Rob
Rank: Captain

Reference No: 2
Name: Stannis
Rank: Major

일반적으로 cincout은 C++에서 ostream에 속하지만 cin 개체(전역 개체)는 istream 클래스에 속합니다.

또한 파일 스트림에는 다음이 포함됩니다. ifstreamofstream은 각각 istreamostream에서 상속됩니다.

프로그래머는 버퍼가 항상 보유해야 하는 데이터보다 크다는 사실을 알고 있어야 합니다. C++에서는 확인되지 않거나 해결된 오류의 경우 프로그램의 안정성이 감소할 가능성이 높아질 수 있으며 파일 작업으로 인해 프로그램이 중지되지 않도록 해야 합니다.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub

관련 문장 - C++ File