C++ 转换标准::向量<;T>;烧焦*
我正在尝试将vector转换为char*,以便通过套接字发送 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
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
不是问题的根源。你可以试着在你的问题中为我们提供一个答案,以便有人能提供帮助。一种更简单、更快的方法是逐行调试代码。