簡體   English   中英

C++ 如何轉換 std::vector<std::byte> 常量 uint8_t *

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM