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