我有一个非常大的布尔值数组,我想将它写入array([[ 0., 3., 1., 4.],
[ 3., 0., 4., 1.],
[ 1., 4., 0., 5.],
[ 4., 1., 5., 0.]])
文件。
我尝试了.txt
,当我使用fwrite()
命令打印输出cat
文件时,它会在屏幕上打印一些奇怪的符号。
我希望它显示为.txt
和0
。怎么做?
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);
值,但由于数组的大小非常大,所以太费钱了。
答案 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作为布尔值,你需要为此编写代码。