繁体   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