2017-05-13 48 views
0

我试图转换矢量为char *通过插座 发送T的类型是一个简单的结构转换的std ::矢量<T>为char *

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

std::vector<CategoryStruct> categories; 

功能,在这里我想转换 -

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; 
} 

末回报将是 “”

+5

你可以简单地将任何'categories.data()'直接返回'memcpy'。 – ForceBru

+0

欢迎来到Stack Overflow。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –

+2

你不需要转换任何东西,直接将'categories.data()'传递给'send'或'write'。 –

回答

2

没有必要为转换std::vector<CategoryStruct>已经将数据存储在连续的存储区域中。所以你的功能可以归结为

std::vector<CategoryStruct> categories; 
char * Category::decodeCategoryToCharArray() 
{ 
    return reinterpret_cast<char*>(categories.data()); 
} 
+0

我仍然得到“”但类别包含2项 –

+0

@Pavel那么,可能有其他原因,请放心,'std :: vector'不是你的问题的根源。您可以尝试在您的问题中为我们提供[MCVE],以便有人可以提供帮助。更简单快捷的方法是逐行调试代码。 –

相关问题