c / c ++ - 如何将boolean值数组写入文本文件?

时间:2017-06-05 08:11:56

标签: c++ io

我有一个非常大的布尔值数组,我想将它写入array([[ 0., 3., 1., 4.], [ 3., 0., 4., 1.], [ 1., 4., 0., 5.], [ 4., 1., 5., 0.]]) 文件。

我尝试了.txt,当我使用fwrite()命令打印输出cat文件时,它会在屏幕上打印一些奇怪的符号。

我希望它显示为.txt0。怎么做?

1

另外,我已经考虑过将这些值转换为bool* tmp = new bool[size]; // tmp has actual values in it, this is just used to show what are tmp and size FILE* f = fopen("result.txt", "wb"); for (int i=0; i<size; i++) { fwrite(tmp, sizeof(bool), num_sample_per_point, f); fwrite("\n", sizeof(char), 1, f); // insert new line } fclose(f); 值,但由于数组的大小非常大,所以太费钱了。

2 个答案:

答案 0 :(得分:2)

将类型T的二进制表示写入文件不会为您提供人类可读的文本文件(类型char除外)。编写值为true的bool类型可以生成二进制模式00000001,并且在文件上使用cat打印字母1

如果您希望文件包含0为false而1为true的字母,则必须先转换bool值。

保持代码风格,它可能看起来像:

int main(void) {
  const int size = 3;
  bool tmp[size] = {false, true, false};
  FILE* f = fopen("result.txt", "w");
  for (int i=0; i<size; i++) {
    fwrite(tmp[i] ? "1" : "0", sizeof(char), 1, f);
    //     ^^^^^^^^^^^^^^^^^
    //     convert bool to letter
  }
  fwrite("\n", sizeof(char), 1, f); // insert new line
  fclose(f);
  return 0;
}

注意:如果你正在编写c ++,你应该看看std::ofstream

答案 1 :(得分:0)

如果要将人类可读数据保存到文件中,请将其打开以显示文本:

FILE* f = fopen("result.txt", "wt");
//                              ^-----

否则它被写成二进制文件。  然后,您需要考虑所写内容的具体细节。如果你想要1或0作为布尔值,你需要为此编写代码。