簡體   English   中英

如何將std :: string轉換為std :: vector <std::byte> 在C ++ 17中?

[英]How to convert std::string to std::vector<std::byte> in C++17?

如何在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;
        ~~~~~~~~~~^~~~~~~~~~

使用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

std::byte不應該是通用的8位整數,而只能代表原始二進制數據的blob。 因此,它(正確地)不支持char賦值。

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


如果您確實要將字符串轉換為std::byte實例的向量,請考慮使用std::transform或range- for循環執行轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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