Содержат ли преобразования в двоичные файлы в C ++ текст, показывающий, что в них есть что-то? - PullRequest
0 голосов
/ 18 марта 2020

Я работаю над проектом, в котором мне нужно сначала преобразовать двоичный файл в массив символов, затем поменять регистр для каждой буквы, а затем добавить измененный массив в другой выходной файл. Однако, когда я читаю данные двоичного файла, он возвращает пустой массив, поэтому ничего не передается в функцию подкачки.

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main( )
{
  char *buf;
  string str1 = "abababab";

  int size1 = (str1.size());

  ofstream output ("output.txt", ios::out | ios::binary);

  output.write(reinterpret_cast<char *>(&size1), sizeof(int));
  output.write(str1.c_str(), size1);

  output.flush();
  output.close();

  return 0;
}

Моя проблема в том, что файл output.txt содержит текстовые символы, такие как:

^H^@^@^@abababab

Это все еще бинарный файл на этом этапе, и если у меня есть программа, читающая будет ли каждый набор байтов выводить их правильно?

1 Ответ

0 голосов
/ 18 марта 2020

Моя проблема в том, что файл output.txt содержит текстовые символы, как показано ниже ^H^@^@^@abababab

Что ожидается: вы сначала написали int (предположительно, из 4 байтов), что это часть ^H^@^@^@, а затем строка.

Это все еще двоичный файл на данный момент

Все файлы являются двоичными. «Текстовые файлы» - это просто способ сказать, что содержимое следует некоторой текстовой кодировке, например, UTF-8.

Если у меня есть программа, считывающая каждый набор байтов, будет ли она выводить их правильно?

Если вы спрашиваете, является ли проблемой сохранение байтов, которые не являются текстовыми: нет, это не проблема.

...