2017-05-13 10 views
0

私はソケット によってTの種類を送信するためにchar *にベクトルを変換しようとしているが、私が変換しようとしているシンプルな構造体コンバートのstd :: charへのベクトル<T> *

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

ようこそスタックオーバーフロー。 [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]を提供して、誰かが助けることができるかもしれません。より簡単で速い方法は、コードを行ごとにデバッグすることです。 –

関連する問題