我正在尝试将内存(使用malloc制作)转储到文件中。我想转储原始数据,因为我不知道在我要转储内存的时候内存中的内容(int float double)。 最好的方法是什么? 我已经尝试了一些东西但是没有按照我的意愿工作。
答案 0 :(得分:4)
在C中,它非常微不足道,真的:
const size_t size = 4711;
void *data = malloc(size);
if(data != NULL)
{
FILE *out = fopen("memory.bin", "wb");
if(out != NULL)
{
size_t to_go = size;
while(to_go > 0)
{
const size_t wrote = fwrite(data, to_go, 1, out);
if(wrote == 0)
break;
to_go -= wrote;
}
fclose(out);
}
free(data);
}
上述尝试正确地循环fwrite()
来处理短写,这是大多数复杂性来自的地方。
答案 1 :(得分:3)
目前尚不清楚“不工作”是什么意思。
您可以将reinterpret_cast
内存发送到char *
并轻松将其写入文件。
再读回来是另一回事。
答案 2 :(得分:2)
这样做的“C ++方式”可能涉及在二进制模式下使用std::ostream::write
和流。
#include <fstream>
#include <string>
bool write_file_binary (std::string const & filename,
char const * data, size_t const bytes)
{
std::ofstream b_stream(filename.c_str(),
std::fstream::out | std::fstream::binary);
if (b_stream)
{
b_stream.write(data, bytes);
return (b_stream.good());
}
return false;
}
int main (void)
{
double * buffer = new double[100];
write_file_binary("test.bin",
reinterpret_cast<char const *>(buffer),
sizeof(double)*100);
delete[] buffer;
return 0;
}
答案 3 :(得分:0)
如果这是C ++,则在序列化和反序列化过程中可能会为您提供帮助, 我将原始内存数组写入文件(使用new []本质上是相同的 作为C世界中的malloc):
https://github.com/goblinhack/simple-c-plus-plus-serializer
#include "hexdump.h" auto elems = 128; static void serialize (std::ofstream out) { auto a = new char[elems]; for (auto i = 0; i > bits(a); hexdump(a, elems); }
输出:
128 bytes: 0000 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |................| 0010 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |................| 0020 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f | !"#$%&'()*+,-./| 0030 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f |0123456789:;?| 0040 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f |@ABCDEFGHIJKLMNO| 0050 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f |PQRSTUVWXYZ[\]^_| 0060 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f |`abcdefghijklmno| 0070 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f |pqrstuvwxyz{|}~.|