바이너리 파일을 부호 없는 문자 벡터로 읽는 작업을 수행할 때 몇 가지 옵션이 나타납니다.
옵션 1: char로의 명시적 캐스팅*
이 접근 방식은 char*로의 명시적 캐스팅을 사용하여 데이터를 벡터로 읽습니다.
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { // ... file.read((char*) &fileData[0], fileSize); return fileData; }</code>
기능하는 동안, 이는 불안의 원인이 될 수 있는 명시적인 캐스트가 필요합니다.
옵션 2: istreambuf_iterator with char
char를 템플릿 인수로 사용하여 std::istreambuf_iterator를 사용하면 단순화됩니다. 코드:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { // ... return std::vector<BYTE>(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>()); }</code>
그러나 벡터에 부호 없는 문자가 포함되어 있어도 반복자에서는 여전히 문자를 사용합니다.
옵션 3: BYTE가 포함된 basic_ifstream
이 옵션은 BYTE를 유형으로 사용하도록 입력 파일 스트림을 명시적으로 선언하여 의도의 명확성을 제공합니다.
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { // ... std::basic_ifstream<BYTE> file(filename, std::ios::binary); return std::vector<BYTE>(std::istreambuf_iterator<BYTE>(file), std::istreambuf_iterator<BYTE>()); }</code>
basic_ifstream의 적합성은 특정 사용 사례에 따라 다릅니다.
istreambuf_iterator: 단순성 대 효율성
std::istreambuf_iterator는 단순성을 제공하지만 바이너리 데이터에 가장 효율적인 옵션은 아닐 수 있습니다. >>를 사용합니다. 데이터를 해석하기 위해 잠재적으로 불필요한 오버헤드가 발생할 수 있습니다. std::copy와 같은 대체 접근 방식을 고려하십시오.
추가 고려 사항
위 내용은 바이너리 파일을 부호 없는 문자 벡터로 효과적으로 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!