如何在C ++ 17中将std :: string转换为std :: vector <std :: byte>?

时间:2018-10-08 09:40:33

标签: c++ byte

如何在C ++ 17中将std::string转换为std::vector<std::byte>已编辑:由于要尽可能多地检索数据,我正在填充异步缓冲区。因此,我在缓冲区上使用了std::vector<std::byte>,我想转换字符串以填充它。

std::string gpsValue;
gpsValue = "time[.........";
std::vector<std::byte> gpsValueArray(gpsValue.size() + 1);
std::copy(gpsValue.begin(), gpsValue.end(), gpsValueArray.begin());

但我收到此错误:

error: cannot convert ‘char’ to ‘std::byte’ in assignment
        *__result = *__first;
        ~~~~~~~~~~^~~~~~~~~~

2 个答案:

答案 0 :(得分:4)

使用std::transform应该可以:

#include <algorithm>
#include <cstddef>
#include <iostream>
#include <vector>

int main()
{
    std::string gpsValue;
    gpsValue = "time[.........";
    std::vector<std::byte> gpsValueArray(gpsValue.size() + 1);
    std::transform(gpsValue.begin(), gpsValue.end(), gpsValueArray.begin(),
                   [] (char c) { return std::byte(c); });
    for (std::byte b : gpsValueArray)
    {
        std::cout << int(b) << std::endl;
    }
    return 0;
}

输出:

116
105
109
101
91
46
46
46
46
46
46
46
46
46
0

答案 1 :(得分:1)

std::byte不应该是通用的8位整数,而只能代表原始二进制数据的blob。因此,它(正确地)不支持来自char的分配。

您可以改用std::vector<char>-但这基本上就是std::string


如果您确实要将字符串转换为std::byte实例的向量,请考虑使用std::transform或range-for循环执行转换。