在 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::uint8_t> bytes = ToByte(996u);
cmd.insert(cmd.end(), bytes.begin(),bytes.end());
for (auto& v : cmd) {
std::cout << std::hex << (int)v << std::endl;
}
}
https://isocpp.org/wiki/faq/serialization
本文探讨了在UDP传输中如何将C++标准类型转换为字节流进行序列化,以适应二进制数据传输的需求。通过特定模板实现这一过程。
11万+

被折叠的 条评论
为什么被折叠?



