C++ 转换标准::向量<;T>;烧焦*

C++ 转换标准::向量<;T>;烧焦*,c++,C++,我正在尝试将vector转换为char*,以便通过套接字发送 T的类型是一个简单的结构 struct CategoryStruct { int ID; char name[32]; }; std::vector<CategoryStruct> categories; struct类别struct{ int-ID; 字符名[32]; }; std::向量类别; 函数,在这里我试图转换- char * Category::decodeCategoryToCharAr

我正在尝试将vector转换为char*,以便通过套接字发送 T的类型是一个简单的结构

struct CategoryStruct {
    int ID;
    char name[32];
};

std::vector<CategoryStruct> categories;
struct类别struct{
int-ID;
字符名[32];
};
std::向量类别;
函数,在这里我试图转换-

char * Category::decodeCategoryToCharArray()
{
    int structSize = sizeof(CategoryStruct),
        currentByte = 0,
        i = 0;

    if(decoded)
        delete [] decoded;

    decoded = new char[structSize * categories.size()];
    std::vector<CategoryStruct>::iterator start, end;

    start = categories.begin();
    end = categories.end();

    for(; start != end; start++, i++)
    {
        memcpy(decoded+currentByte, &categories[i], structSize);
        currentByte += structSize+1;
    }

    return decoded;
}
char*Category::decodeCategoryToCharray()
{
int structSize=sizeof(CategoryStruct),
currentByte=0,
i=0;
如果(已解码)
删除[]已解码;
解码=新字符[structSize*categories.size()];
std::vector::迭代器开始、结束;
开始=类别。开始();
end=categories.end();
for(;start!=end;start++,i++)
{
memcpy(解码+当前字节和类别[i],结构大小);
currentByte+=structSize+1;
}
返回解码;
}
结束返回将为“”

无需转换,
std::vector
已将数据存储在连续的内存区域中。所以你的函数可以归结为

std::vector<CategoryStruct> categories;
char * Category::decodeCategoryToCharArray()
{
    return reinterpret_cast<char*>(categories.data());
}
std::向量类别;
char*Category::decodeCategoryToCharArray()
{
返回reinterpret_cast(categories.data());
}
无需转换,
std::vector
已将数据存储在连续的内存区域中。所以你的函数可以归结为

std::vector<CategoryStruct> categories;
char * Category::decodeCategoryToCharArray()
{
    return reinterpret_cast<char*>(categories.data());
}
std::向量类别;
char*Category::decodeCategoryToCharArray()
{
返回reinterpret_cast(categories.data());
}

您可以简单地复制任何
类别。data()
直接使用
memcpy
返回。欢迎使用堆栈溢出。请花点时间阅读并参考您可以在此处询问的内容和方式。您不需要转换任何内容,直接将
categories.data()
传递到
send
write
。我尝试使用memcpy(decoded,categories.data(),getCategorySize());但它仍然不起作用。我需要转换以使用标题发送此数据如果执行此操作,什么不起作用?您可以简单地复制任何
类别。data()
直接返回
memcpy
。欢迎使用堆栈溢出。请花点时间阅读并参考您可以在此处询问的内容和方式。您不需要转换任何内容,直接将
categories.data()
传递到
send
write
。我尝试使用memcpy(decoded,categories.data(),getCategorySize());但它仍然不起作用。我需要转换以与Headers一起发送此数据如果这样做,什么不起作用?我仍然得到“”,但类别包含2items@Pavel嗯,这可能还有其他原因,请确保
std::vector
不是问题的根源。你可以试着在你的问题中为我们提供一个答案,以便有人能提供帮助。一种更简单、更快的方法是逐行调试代码。我仍然得到“”,但类别包含2items@Pavel嗯,这可能还有其他原因,请确保
std::vector
不是问题的根源。你可以试着在你的问题中为我们提供一个答案,以便有人能提供帮助。一种更简单、更快的方法是逐行调试代码。