我在搜索中没有找到任何直接相关的内容,所以如果这是重复的,请原谅。
我想要做的是通过网络连接序列化数据。我的方法是将我需要传输的所有内容转换为std::vector< uint8_t >
并在接收端将数据解包到适当的变量中。我的方法如下:
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);
}
我正在使用它
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);
我关心的是
uint8_t * src = static_cast < uint8_t* >(static_cast < void * >(&data));
行(我理解它的作用与reinterpret_cast
)。有没有更好的方法可以在不使用双重演员的情况下完成此任务?
我天真的方法是只使用static_cast< uint8_t* >(&data)
失败了。我有过去被告知 https://stackoverflow.com/questions/2158928/inherit-from-two-polymorphic-classes that reinterpret_cast
不好。因此,如果可能的话,我想避免它(或我当前拥有的构造)。
当然,总有uint8_t * src = (uint8_t *)(&data)
.
建议?