Je n'ai pas trouvé quelque chose de directement lié à la recherche, alors s'il vous plaît pardonner s'il s'agit d'un doublon.sérialiser tout type de données en tant que vecteur <uint8_t> - utiliser reinterpret_cast?
Ce que je cherche à faire est de sérialiser les données à travers une connexion réseau. Mon approche consiste à convertir tout ce que j'ai besoin de transférer vers un std::vector<uint8_t>
et, du côté récepteur, décompresser les données dans les variables appropriées. Mon approche ressemble à ceci:
template <typename T>
inline void pack (std::vector<uint8_t>& dst, T& data) {
uint8_t * src = static_cast < uint8_t* >(static_cast < void * >(&data));
dst.insert (dst.end(), src, src + sizeof (T));
}
template <typename T>
inline void unpack (vector <uint8_t >& src, int index, T& data) {
copy (&src[index], &src[index + sizeof (T)], &data);
}
Ce que je suis en utilisant comme
vector<uint8_t> buffer;
uint32_t foo = 103, bar = 443;
pack (buff, foo);
pack (buff, bar);
// And on the receive side
uint32_t a = 0, b = 0;
size_t offset = 0;
unpack (buffer, offset, a);
offset += sizeof (a);
unpack (buffer, offset, b);
Ma préoccupation est le
uint8_t * src = static_cast < uint8_t* >(static_cast < void * >(&data));
ligne (que je comprends faire la même chose que reinterpret_cast
). Y a-t-il un meilleur moyen d'accomplir cela sans le double casting?
Mon approche naïve consistait simplement à utiliser static_cast< uint8_t* >(&data)
qui a échoué. J'ai been told in the past que reinterpret_cast
est mauvais. Donc, je voudrais l'éviter (ou la construction que j'ai actuellement) si possible.
Bien sûr, il y a toujours uint8_t * src = (uint8_t *)(&data)
.
Suggestions?
Donc, oui, abus de langage. En ce qui concerne le reste de votre commentaire: la question, telle qu'elle est posée, est une simplification pour savoir si 'reinterpret_cast '(ou similaire) - je vais le renommer pour être plus spécifique. Je suis conscient des subtilités dans le transfert de données et en interne tout a un pack/unpack qui fait essentiellement ce que je décris ci-dessus pour ses propres données. – ezpz