繁体   English   中英

如何转换 std::vector<uint8_t> 到 std::basic_string<std:::byte> 用于 pqxx</std:::byte></uint8_t>

[英]How to convert std::vector<uint8_t> to std::basic_string<std:::byte> for usage with pqxx

我正在将应用程序从使用 libpqxx 7.1.2升级到7.3.1 ,同时发生的变化之一是pqxx::binarystring已被弃用,取而代之的是std::basic_string<std::byte> 我的问题是我在 C++ 中使用std::vector<uint8_t>来表示 SHA-1 hash,然后我需要将其作为 BYTEA 存储在 Postgress 中。 所以现在我需要找到一种方法将std::vector<uint8_t>转换为std::basic_string<std::byte>并返回。 但是我一直无法找到一种方法来从向量-> 字符串中获取。

我一直在查看std::basic_string<T>的构造函数,但根本不知道该怎么做。 在构造std::basic_strig<T>的其他方法中,我已经尝试过这个,但都给出了编译器错误error: no matching constructor for initialization of 'std::basic_string<std::byte>' 但是当我查看文档时,我认为我尝试过的不同选项应该是合法的。 那么我该如何实现呢?

#include <string>
#include <vector>
#include <cstdint>
#include <cstddef>

int main(void)
{
    std::vector<uint8_t> data = {1, 2, 3, 4};
    std::basic_string<std::byte> a(std::begin(data), std::end(data));
    std::basic_string<std::byte> b((char*)data.data(), data.size()); 
}

奇怪的是,他们为此选择了basic_string而不是vector ,但这有效:

std::basic_string<std::byte> a(
    static_cast<const std::byte *>(static_cast<const void *>(data.data())),
    data.size()
);

应该没问题,因为uint8_t是可简单复制的,而std::byte指针可以为其他指针起别名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM