Я все еще работаю над проблемой ввода / вывода с битовой картой неделю назад.Я снова застрял, поэтому я решил начать с того типа ввода / вывода, с которым я был знаком, и сделать его более похожим на то, что мне нужно, - постоянно проверять каждый байт (пиксель) и выводить в файл на основе этого.значение байта).
Я начал с программы, которая считывала и проверяла каждый символ текстового файла, выводила «Z», если он был выше некоторого порога, и выводила «A», если он был ниже.
Эта программа работала отлично, поэтому я решил изменить ее с символов на байты в файле.
Теперь у меня проблемы с этим.Первые 26 (байты 0-25) байтов файла являются правильными, но остальные - 0 или -1, в зависимости от того, что я использую ifstream.get()
или ifstream.read
.
Входной файл Input.FILE
был создан в шестнадцатеричном редакторе и содержит только 0x00-0xFF
.Длина - 256 байт.
Код:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
ifstream sourcefile;
ofstream output;
ofstream output2;
output.open("output.txt");
output2.open("messages.txt");
sourcefile.open("Input.FILE");
vector<char> data(256);
sourcefile.read(&data[0],256);
sourcefile.seekg(0,ios::beg);
for(int i = (int) 0x00 ; i < data.size() ; i++)
{
output2 << "Value data[" << i << "] = " << (int) data[i] << endl;
if((int)data[i] < 0)
{
// since I can't make an unsigned char vector, I use this to convert
// it to the correct number. Could this be the problem?
data[i] = 256 + data[i];
output2 << "less than zero." << endl;
}
if(data[i] > 64)
{
data[i] = 0xFF;
output2 << "greater than 64, set to 0xFF." << endl;
}
else if(data[i] < 64)
{
data[i] = 0x00;
output2 << "less than 64, set to 0x00." << endl;
}
else
{
// This is most likely pointless, but I didn't want to take a chance
data[i] = 0x75;
output2 << "neither greater nor less than 64? Set to 0x75." << endl;
}
output2 << endl;
}
output.write(&data[0],256);
}
Вывод (от message.txt
):
Примечание: data[0-25]
содержит правильные значения
...
Данные значений [19] = 19 меньше 64, установлены на 0x00.
Данные значений [20] = 20 меньше64, значение 0x00.
Данные значения [21] = 21 меньше 64, значение 0x00.
Данные значения [22] = 22 меньше 64, значение 0x00.
Данные значения [23]= 23 меньше 64, значение 0x00.
Данные значения [24] = 24 меньше 64, значение 0x00.
Данные значения [25] = 25 меньше 64, значение 0x00.
значениеданные [26] = 0 меньше 64, установлено на 0x00.