Я работаю над Ubuntu 10.04 и gcc. У меня есть двоичный файл с моим собственным магическим номером. Когда я читаю файл, магическое число не совпадает. Потоки швы должны быть правильными.
Написание магического числа:
std::fstream chfile;
chfile.open(filename.c_str(), std::fstream::binary | std::fstream::out);
if (chfile.good())
{
chfile << (unsigned char)0x02 << (unsigned char)0x46 << (unsigned char)0x8A << (unsigned char)0xCE;
// other input
chfile.close();
}
Чтение магического числа:
std::fstream chfile;
chfile.open(filename.c_str(), std::fstream::binary | std::fstream::in);
if (chfile.good())
{
unsigned char a,b,c,d;
chfile >> a;
chfile >> b;
chfile >> c;
chfile >> d;
printlnn("header must : " << (int)0x02 << ' ' << (int)0x46 << ' ' << (int)0x8A << ' ' << (int)0xCE); // macro for debugging output
printlnn("header read : " << (int)a << ' ' << (int)b << ' ' << (int)c << ' ' << (int)d);
chfile.close();
}
Когда я использую 02 46 8A CE в качестве магического числа, все в порядке (как говорится в выводе):
header must : 2 70 138 206
header read : 2 70 138 206
но когда я использую EA 50 0C C5, получается:
header must : 234 80 12 197
header read : 234 80 197 1
и последний 1 является допустимым значением для следующего ввода. Так чем они отличаются и как мне это исправить?