[英]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.