【发布时间】:2018-10-22 05:38:54
【问题描述】:
我正在解析二进制标头 (std::vector<unsigned char>),需要提取四个无符号整数。
我有时还需要提取unsigned short(对于其他标头),因此更可取的是通用解决方案。
如何将 std::vector 的切片转换为整数?
这是我尝试过的:
class PacketHeader {
public:
static const unsigned short LENGTH = 16;
PacketHeader(std::vector<unsigned char> &binary_data) {
this->timestamp_seconds = ntohs(*reinterpret_cast<const unsigned int *>(&binary_data[0]));
this->timestamp_ms_or_ns = ntohs(*reinterpret_cast<const unsigned int *>(&binary_data[4]));
this->packet_data_length = ntohs(*reinterpret_cast<const unsigned int *>(&binary_data[8]));
this->untruncated_packet_data_length = ntohs(*reinterpret_cast<const unsigned int *>(&binary_data[12]));
}
unsigned int get_timestamp_seconds();
unsigned int get_timestamp_ms_or_ns();
unsigned int get_packet_data_length();
unsigned int get_untruncated_packet_data_length();
private:
unsigned int timestamp_seconds;
unsigned int timestamp_ms_or_ns;
unsigned int packet_data_length;
unsigned int untruncated_packet_data_length;
};
【问题讨论】:
-
谨防严格的别名规则。
-
我强烈建议编写一个序列化器/反序列化器,用于将数据打包到字节的 std::vector 中,而不是手动将每个成员变量重新解释为字节位置 x。它不仅允许您序列化任何数据,还允许序列化其他类/结构中的类/结构 - 自动
标签: c++