实现数据打包和解包,用于解决数据传输中的粘包等问题。
包头2字节(0x5AA5)+数据净长度4字节(大端序)+长度校验2字节(长度CRC16)+数据+校验2字节(数据CRC16/长度CRC16的按位取反)
- C++11
- CMake 3.1
- CRC16 for data length
- CRC16 of data is option (default is data size CRC)
- Only
10 bytesfor data header and CRC - Support
packForeachavoid unnecessary data copy
- simplest
PacketProcessor processor([&](uint8_t* data, size_t size) {
printf("Got packet: %zu, %s\n", size, std::string((char*)data, size).c_str());
});
auto payload = processor.pack("hello world");
processor.feed(payload.data(), payload.size());- full test
test/main.cpp