我正在尝试在文件中写入C结构(以二进制写入)并读取它以恢复它。我不知道这是否可能。 以下是我有:C++ - 如何编写和读取包含对象的结构? (写入和读取二进制文件)
head.hh:
#include <iostream>
typedef struct s_test
{
char cmd[5];
std::string str;
}t_test;
main.cpp中:
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "head.hh"
int main()
{
t_test test;
int fd = open("test", O_APPEND | O_CREAT | O_TRUNC | O_WRONLY, 0666);
test.cmd[0] = 's';
test.cmd[1] = 'm';
test.cmd[2] = 's';
test.cmd[3] = 'g';
test.str = "hello world";
write(fd, &test, sizeof(t_test));
close(fd);
fd = open("test", O_APPEND | O_CREAT | O_WRONLY, 0666);
t_test test2;
read(fd, &test2, sizeof(t_test));
std::cout << test2.cmd << " " << test2.str << std::endl;
return (0);
}
和输出我有类似: Ȟ
你不能以这种方式读/写一个'std :: string',你需要一次一个序列化数据。 –
这不会在没有序列化的情况下工作 – drescherjm
使用“基本”类型,这意味着,在结构中不是对象,然后你可以用char,int,float来做到这一点。如果你使用一个对象,你将无法得到真正的大小 – Lefsler