c++ - 如何将不同的数据类型推送到 void 缓冲区中?

标签 c++ c visual-studio-2008

我有以下数据需要添加到 void 缓冲区中:

MyStruct somedata; // some struct containing ints or floats etc.
string somestring;

我该怎么做?

这是我的缓冲区分配:

void *buffer = (void *)malloc(datasize);

我如何首先将 somedata 添加到缓冲区(假设需要 20 个字节),然后在 20 个字节之后是可变大小的字符串。我正在考虑逐字节读取结构并添加到缓冲区,但这感觉很愚蠢,必须有一些更简单的方法......?

编辑: 我希望它等于: fwrite( struct1 ); fwrite( struct2 );它们是按顺序调用的,但我不想写入文件,而是写入一个空缓冲区。

编辑 2:让它工作,这里是代码:

char *data = (char *)malloc(datasize);

unsigned int bufferoffset = 0;

for(...){
    MyStruct somedata; // some POD struct containing ints or floats etc.
    string somestring;

    ... stuff ...

    // add to buffer:
    memcpy(data+bufferoffset, &somedata, sizeof(MyStruct));
    bufferoffset += sizeof(MyStruct);
    memcpy(data+bufferoffset, somestring.c_str(), str_len); 
    bufferoffset += str_len;
}

有什么要解决的吗?

最佳答案

memcpy(buffer, &somedata, sizeof(MyStruct));
strcpy(buffer + sizeof(MyStruct), somestring.c_str());

这会将字符串复制为 c 字符串。

关于c++ - 如何将不同的数据类型推送到 void 缓冲区中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4173343/

相关文章:

c++ - 如何使用boost asio

c++ - if-else 语句中的条件被错误地评估

visual-studio - 当我按 END 时,如何让 Visual Studio 2008 忽略尾随空格?

c++ - 重叠标识符

c++ - 清理字符串以打印到终端的惯用方法?

c++ - SDL2_gfx 屏幕在第二次循环后填充

c - 有什么简单的方法可以在for循环中找到结构成员的大小

c# - 有没有办法在 Visual Studio 中不创建显式 EventHandler 委托(delegate)?

c++ - 声明和访问全局对象

c++ - 简单的 C++ 连接到 mysql 数据库