編集:どうやら、問題は読み取り機能にあります:16進エディターでデータをチェックしました
02 00 00 00 01 00 00 00 00 00 00 00
したがって、ゼロはゼロとして読み取られるのではなく、ゼロとして格納されます。
通常の store-in-bin ファイル機能を使用すると、次のようになります。
int a = 0;
file.write(reinterpret_cast<char*>(&a), sizeof(a));
バージョンとして 0 を格納するchar
か、または "\0" を格納しますが、これは明らかに格納されていません (null 値であるため?)。そのため、関数を呼び出してゼロ値を読み取ると、その直後 (または直前) の値が読み取られます。ファイルの最後になる場合)。では、.bin ファイルにゼロを適切に格納するにはどうすればよいでしょうか。
編集: 読み取り/書き込みプロセスに関連する関数の一部を次に示します。
//Init program: creates a sector.bin for another program to read from.
#include<fstream>
using namespace std;
int main()
{
fstream file;
file.open("sector.bin", ios::out | ios::binary);
if(!file.is_open())
{
file.open("sector.bin", ios::out | ios::binary);
file.close();
file.open("sector.bin", ios::out | ios::binary);
if(!file.is_open())
{
return -1;
}
}
file.seekp(file.beg);
int a = 2;
int b = 1;
int c = 0;
file.write(reinterpret_cast<char*>(&a), sizeof(a));
file.write(reinterpret_cast<char*>(&b), sizeof(b));
file.write(reinterpret_cast<char*>(&c), sizeof(c));
file.close();
return 0;
}
//Read function: part of another program that intializes variables based off
//of sector.bin
void sector::Init(std::fstream& file)
{
int top_i = FileRead(file,0);
std::cout<<top_i<<std::endl;
for(int i = 0; i < top_i; i++)
{
accessLV[i] = FileRead(file,i+1);
std::cout<<accessLV[i]<<std::endl;
}
std::cin.ignore();
viral_data.add(new X1(5,5,'X'));
viral_data.add(new X1(9,9,'X'));
player.set(0,0,'O');
return;
}
//the FileRead used in init
int FileRead(std::fstream& file, int pos)
{
int data;
file.seekg(file.beg + pos);
file.read(reinterpret_cast<char*>(&data), sizeof(data));
return data;
}
また、使用時の出力sector::Init
は次のとおりです。
2
1
1
ビンに書き込もうとしていた出力は
2
1
0
したがって、0 が 1 として読み書きされているか、書き込まれておらず、Init が最後の値を 2 回読み取っています。