English 中文(简体)
如何将“0”的惯性价值储存在册? (C++)
原标题:
  • 时间:2009-05-27 00:20:11
  •  标签:

编辑:显然,问题在读取函数中:我在十六进制编辑器中检查了数据。

02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00

因此,零被储存为零,不算为零。

因为当我使用正常的库存-内-宾档案功能时:

int a = 0;
file.write(reinterpret_cast<char*>(&a), sizeof(a));

它作为<条码><>/条码>版本或“日报”储存,这显然是储存的(因为其价值无效?)这样,当我称我的职能为零值时,它就读到其之后的价值(或者说是档案中的最后一点)。 因此,我怎么能够把零存放在 file子档案中?

EDIT:与读/正文过程有关的部分职能如下:

//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;
}

此外,使用<代码>部门的产出:Init如下:

2
1
1

我试图写进这本书的功用是

2
1
0

因此,0正读/写为1,或者没有书写,Init读到最后价值两倍。

最佳回答

它不清楚你在档案中通过“储存的分类账价值0”的含义。 档案含有tes,而不是 in。 您是否需要储存零件,或只储存一只 by子?

P.S.,我也想把这个问题列入你的读写法。 你们是否看一看一 editor子的编辑?

P.P.S. Your problem is in seekg() function use. 你不是通过tes子,而是通过pos子。 它应当包含(int)的大小。

问题回答

int num = 0;
write( fd, &num, sizeof( int ));

我不肯定你想要做些什么,对我来说,你提供的守则似乎是你要求做的:

int main() {
   std::ofstream file("/tmp/tst.out");
   int a = 0;
   file.write(reinterpret_cast<char*>(&a), sizeof(a));
   return 0;
}

由此产生了4个按字体大小的档案,其中含有零 in的双体表述:

$ hexdump /tmp/tst.out
0000000 0000 0000
0000004

如果你想像ASCII代表那样储存这种分类,那么你就应当使用格式的流输出,并使用<代码><:

std::ofstream file("/tmp/tst.out");
int a = 0;
file << a << std::endl;

这样,你就可以:

$ cat /tmp/tst.out
0

你们需要考虑的是,双向档案应当包含什么格式——你不必以同样的方式处理文本档案,这就是为什么多次使用文本档案。

假设一个(32-bit)机器,其大小=4(和CHAR_BITS=8),那么,你就可以在目前档案地点用本地格式储存四台零的tes子,然后由你来做,我想。 你可以试验其他价值,如0x01020304,你将看到你机器的 by布。

当然,你需要仔细阅读,改变书面程序。 在试图重新阅读刚才撰写的数据之前,不要忘记重新定位档案。





相关问题