Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

C++. Как можно прочитать файл в бинарном режиме?

У меня есть текстовый файле некой кодировки. Я хочу прочитать его побайтово и вывести на экран именно байты каждого закодированного символа. Как можно это сделать?

По дате
По рейтингу
Аватар пользователя
Новичок

#include <fstream>
#include <iostream>

int main() {
ifstream inputFile("file.bin", ios::in | ios::binary);

if (!inputFile) {
cout << "Error opening file." << endl;
return 1;
}

char buffer[1024]; // буфер для хранения байтов
inputFile.read (buffer, 1024); // чтение 1024 байтов

for (int i = 0; i < 1024; i++) {
cout << "Byte " << i << ": " << (int)buffer[i] << endl;
}

inputFile.close();

return 0;
}

Аватар пользователя
Оракул

Чтобы прочитать файл в бинарном режиме в C++ и вывести байты каждого закодированного символа на экран, можно использовать следующие шаги:

1. Открыть файл в бинарном режиме.
2. Прочитать содержимое файла побайтово.
3. Вывести каждый байт в шестнадцатеричном формате (или другом удобном для вас формате).

Пример кода, который выполняет эти шаги:

```cpp

123456789101112131415161718192021222324252627282930313233
 #include <iostream> 
#include <fstream> 
#include <iomanip> // для std::hex и std::setw 
 
int main() { 
    // Имя файла 
    const char* filename = "example.txt"; 
     
    // Открываем файл в бинарном режиме 
    std::ifstream file(filename, std::ios::binary); 
     
    if (!file.is_open()) { 
        std::cerr << "Не удалось открыть файл " << filename << std::endl; 
        return 1; 
    } 
     
    // Чтение файла побайтово 
    char byte; 
    while (file.read(&byte, sizeof(byte))) { 
        // Выводим байт в шестнадцатеричном формате 
        std::cout << std::hex << std::setw(2) << std::setfill('0') << (static_cast<unsigned int>(byte) & 0xFF) << " "; 
    } 
     
    // Проверка на ошибки при чтении 
    if (!file.eof()) { 
        std::cerr << "Ошибка при чтении файла " << filename << std::endl; 
    } 
     
    // Закрываем файл 
    file.close(); 
     
    return 0; 
}  

```

### Объяснение кода:
1. **Открытие файла**:
```cpp

1
 std::ifstream file(filename, std::ios::binary);  

```
Открытие файла `example.txt` в бинарном режиме.

2. **Проверка успешного открытия файла**:
```cpp

1234
 if (!file.is_open()) { 
    std::cerr << "Не удалось открыть файл " << filename << std::endl; 
    return 1; 
}  

```
Проверка, что файл успешно открыт. Если нет, выводим сообщение об ошибке и завершаем программу.

3. **Чтение файла побайтово**:
```cpp

123
 while (file.read(&byte, sizeof(byte))) { 
    std::cout << std::hex << std::setw(2) << std::setfill('0') << (static_cast<unsigned int>(byte) & 0xFF) << " "; 
}  

```
Читаем файл по одному байту и выводим каждый байт в шестнадцатеричном формате. Используем `std::setw(2)` для обеспечения того, чтобы каждый байт был представлен двумя цифрами, и `std::setfill('0')` для заполнения нулями, если цифр меньше двух.

4. **Проверка на ошибки при чтении**:
```cpp

123
 if (!file.eof()) { 
    std::cerr << "Ошибка при чтении файла " << filename << std::endl; 
}  

```
Проверка, не произошла ли ошибка при чтении файла, кроме достижения конца файла.

5. **Закрытие файла**:
```cpp

1
 file.close();  

```

Этот код читает файл побайтово и выводит каждый байт в шестнадцатеричном формате, что позволяет увидеть байты каждого символа в файле независимо от его кодировки.