struct Hearder {
uint32_t DDS_id;
uint32_t platform_id; // 发送方平台ID (0-524287)
uint32_t instance_id; // 发送方实例ID (1-9999)
uint32_t data_length; // 数据长度 (0-65535)
uint16_t total_pack; // 总包数
uint16_t pack_number; // 包序号
uint16_t data_validLength; // 数据有效长度
char md5_ID[32]; // 文件md5值,固定32字节
// 序列化为字符串
std::string SerializeByte() const {
std::string result;
// 添加所有成员变量的数据
result.append(reinterpret_cast<const char*>(&DDS_id), sizeof(DDS_id));
result.append(reinterpret_cast<const char*>(&platform_id), sizeof(platform_id));
result.append(reinterpret_cast<const char*>(&instance_id), sizeof(instance_id));
result.append(reinterpret_cast<const char*>(&data_length), sizeof(data_length));
result.append(reinterpret_cast<const char*>(&total_pack), sizeof(total_pack));
result.append(reinterpret_cast<const char*>(&pack_number), sizeof(pack_number));
result.append(reinterpret_cast<const char*>(&data_validLength), sizeof(data_validLength));
result.append(md5_ID, sizeof(md5_ID));
return result;
}
bool DeserializeByte(const std::string& byteStr) {
// 检查数据长度是否足够
size_t dataSize = sizeof(Hearder);
if (byteStr.size() < dataSize) {
return false; // 数据不足
}
size_t offset = 0;
// 解析所有成员变量
memcpy(&DDS_id, byteStr.data() + offset, sizeof(DDS_id));
offset += sizeof(DDS_id);
memcpy(&platform_id, byteStr.data() + offset, sizeof(platform_id));
offset += sizeof(platform_id);
memcpy(&instance_id, byteStr.data() + offset, sizeof(instance_id));
offset += sizeof(instance_id);
memcpy(&data_length, byteStr.data() + offset, sizeof(data_length));
offset += sizeof(data_length);
memcpy(&total_pack, byteStr.data() + offset, sizeof(total_pack));
offset += sizeof(total_pack);
memcpy(&pack_number, byteStr.data() + offset, sizeof(pack_number));
offset += sizeof(pack_number);
memcpy(&data_validLength, byteStr.data() + offset, sizeof(data_validLength));
offset += sizeof(data_validLength);
// 解析Md5
memcpy(md5_ID, byteStr.data() + offset, sizeof(md5_ID));
offset += sizeof(md5_ID);
return true;
}
// 测试序列化和反序列化功能
static bool TestSerializeDeserializeByte() {
// 创建并初始化测试数据
Hearder original;
original.DDS_id = 1001;
original.platform_id = 2001;
original.instance_id = 3001;
original.data_length = 1024;
original.total_pack = 2;
original.pack_number = 1;
original.data_validLength = 1000;
strncpy(original.md5_ID, "658e8dc0bf8b9a09b36994abf9242099", sizeof(original.md5_ID));
// 序列化
std::string byteStr = original.SerializeByte();
// 反序列化
Hearder restored;
bool success = restored.DeserializeByte(byteStr);
if (!success) {
std::cout << "反序列化失败!" << std::endl;
return false;
}
// 比较原始数据和恢复的数据是否一致
bool isEqual = true;
isEqual &= (original.DDS_id == restored.DDS_id);
isEqual &= (original.platform_id == restored.platform_id);
isEqual &= (original.instance_id == restored.instance_id);
isEqual &= (original.data_length == restored.data_length);
isEqual &= (original.total_pack == restored.total_pack);
isEqual &= (original.pack_number == restored.pack_number);
isEqual &= (original.data_validLength == restored.data_validLength);
isEqual &= (memcmp(original.md5_ID, restored.md5_ID, sizeof(original.md5_ID)) == 0);
std::cout << "测试结果: " << (isEqual ? "成功" : "失败") << std::endl;
return isEqual;
}
}; 请帮我给每行代码加上注释