этот проект не будет читать целые числа как двоичные и выводить их как двоичные в новый файл

0

У меня 6 ints 25 5 30 6 20 36 в txt файле. Программа открывает файл txt в порядке. В моем "cout for loop" в основном программа выводит то, что представляется двоичными представлениями int. Но выходной файл содержит извлечение таких же ints, а не двоичных данных. Я получил этот образец из своего учебника. Как я могу исправить это, чтобы читать в ints и записывать двоичные ints?

#include "lib.h"
//========================================================================================
//========================================================================================

 void open_infile(ifstream& ifs)
{
    string infile;
    cout << "Please enter the name of the file:";
    cin >> infile;

   ifs.open(infile.c_str(), ios_base::binary);
    if (!ifs) error("can't open out file");
}

//========================================================================================
//========================================================================================

 void open_outfile(ofstream& ost)
{
    string outfile;
    cout << "Please enter the name of the file:";
    cin >> outfile;

    ost.open(outfile.c_str(), ios_base::binary);
    if (!ost) error("can't open out file");
}

//========================================================================================
//========================================================================================

 void get_fileContent(ifstream& ifs, vector<int>& v)
{
    int i = 0;

    while(ifs.read(as_bytes(i),sizeof(int)))
        v.push_back(i);
}
 //========================================================================================
//========================================================================================

 void write_fileContent(ofstream& ost, vector<int>& v)
{
    for(int i  =0; i < v.size(); ++i)
        {   
        ost.write(as_bytes(v[i]),sizeof(int));
        }

}
//========================================================================================
//========================================================================================

int main()
{
    ifstream ifs;
    ofstream ost;
    vector<int> v;

    open_infile(ifs);

    get_fileContent(ifs, v);


    //just checking to make sure data is being copied to int vector correctly
    for(int i  =0; i < v.size(); ++i)
        {   
        cout<< endl << v[i]<< endl;
        }

    open_outfile(ost);

    write_fileContent(ost, v);

    keep_window_open();

}
//========================================================================================
//========================================================================================

Выходной сигнал из циклы for в основном: 168637746 856296757 906628400 808585741 909314573

  • 0
    Как вы думаете, бинарный файл? Тот, который при открытии в текстовом редакторе покажет 0 и 1?
  • 0
    Как вы написали этот двоичный файл в первую очередь? Вы должны использовать метод write_fileContent
Показать ещё 4 комментария
Теги:
iostream

2 ответа

1

Если вы хотите, чтобы ваш файл выглядел как ваш вывод в stdout, вам нужно написать его так же, как и для cout:

void write_fileContent(ofstream& ost, vector<int>& v)
{
    for (int i = 0; i < v.size(); ++i)
    {   
        ost << endl << v[i]<< endl;
    }
}

operator<< выполняет форматирование вывода, а write выполняет неформатированный вывод.

  • 0
    Это сделал это !! Но теперь файл содержит:
  • 0
    168637746 856296757 906628400 808585741 909314573 Могу ли я создать другую программу, которая будет преобразовывать ее обратно в форму int и затем выводить целые числа в новый файл?
Показать ещё 2 комментария
0
void write_fileContent(ofstream& ost, vector<int>& v)
{
    for(int i  =0; i < v.size(); ++i)
    {   
        ost.write( reinterpret_cast< char* >( &v[i] ), sizeof(int) );
    }
}

Это должно сработать.

  • 0
    Это именно то, что он уже делает.
  • 0
    Я попробовал этот код, и он вывел те же значения в целых.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню