[英]C++ how can I convert std::vector<std::byte> to const uint8_t *
这个问题在标题中有解释。
如何将std::vector<std::byte>
为const uint8_t *
?
这是一个正确的方法:
class Packet {
public:
Packet():
std::vector<std::byte> body_buffer;
};
void Test(const Packet& packet) {
flatbuffers::Verifier verifier(reinterpret_cast<const uint8_t *>(packet.body_buffer.data()), packet.body_size);
bool check = Vibranium::VerifyLoginRequestBuffer(verifier);
if(check){
Logger::Log("Valid",Logger::LogLevel::Info);
} else {
Logger::Log("In valid check",Logger::LogLevel::Info);
}
}
注意: packet.body_size
是已知的,但未在示例中显示。 该变量一切正常。
验证器构造采用:
class Verifier FLATBUFFERS_FINAL_CLASS {
public:
Verifier(const uint8_t *buf, size_t buf_len, uoffset_t _max_depth = 64,
uoffset_t _max_tables = 1000000, bool _check_alignment = true)
: buf_(buf),
size_(buf_len),
depth_(0),
max_depth_(_max_depth),
num_tables_(0),
max_tables_(_max_tables),
upper_bound_(0),
check_alignment_(_check_alignment) {
FLATBUFFERS_ASSERT(size_ < FLATBUFFERS_MAX_BUFFER_SIZE);
}
....
当我这样做时,它似乎不正确。 还有其他更好的方法吗? 即使我传递了不正确的缓冲区类型,它也总是说它是Valid
而不是真的。
C++ 如何将
std::vector<std::byte>
为const uint8_t *
这是一个正确的方法:
flatbuffers::Verifier verifier(reinterpret_cast<const uint8_t *>(packet.body_buffer.data()), packet.body_size);
在以下条件下,转换可能是正确的:
static_assert(std::is_same_v<uint8_t, unsigned char>);
assert(packet.body_size <= packet.body_buffer.size());
如果满足此条件,则允许uint8_t
作为unsigned char
的名称为所有其他类型设置别名。 我不知道定义了uint8_t
并且未定义为unsigned char
的语言实现,因此这基本上是一个可能永远不会失败的健全性检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.