2017-05-13 50 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],以便有人可以提供幫助。更簡單快捷的方法是逐行調試代碼。 –

相關問題