在 udp 传输二进制流中,通常需要把 c++ 标准类型转换成字节流进行传输,可以使用该模板进行序列化 int
float
double
等类型。
#include <iostream>
#include <cstdint>
#include <vector>
// 基础类型到容器转换
template <typename T>
std::vector<std::uint8_t> ToByte(T input)
{
std::uint8_t* bytePointer = reinterpret_cast<std::uint8_t*>(&input);
return std::vector<std::uint8_t>(bytePointer, bytePointer + sizeof(T));
}
// 容器到基础类型转换
template <typename T>
std::vector<std::uint8_t>& operator>>(std::vector<std::uint8_t>& in, T& out)
{
if (in.size() >= sizeof(T)) {
out = *reinterpret_cast<T*>(in.data());
in.erase(in.begin(), in.begin() + sizeof(T));
}else {
out = T{ 0 };
}
return in;
}
int main()
{
std::vector<std::uint8_t> cmd;
cmd.insert(cmd.end(), {0x88,0x89,0x98,0x99});
std::vector<std::ui