Преобразование строки в массив uint8_t в C++
Я хочу, чтобы объект std::string (например, имя) в массив uint8_t в C++. Функция reinterpret_cast<const uint8_t*>
отклоняет мою строку. И поскольку я пишу код с использованием NS-3, некоторые предупреждения интерпретируются как ошибки.
3 ответа
Если вы хотите указатель на string
данные:
reinterpret_cast<const uint8_t*>(&myString[0])
Если вы хотите копию string
данные:
std::vector<uint8_t> myVector(myString.begin(), myString.end());
uint8_t *p = &myVector[0];
Строковые объекты имеют .c_str()
функция-член, которая возвращает const char*
, Этот указатель может быть приведен к const uint8_t*
:
std::string name("sth");
const uint8_t* p = reinterpret_cast<const uint8_t*>(name.c_str());
Обратите внимание, что этот указатель будет действителен только до тех пор, пока исходный строковый объект не будет изменен или уничтожен.
Если вам нужен фактический массив (а не указатель, как предлагали другие ответы, разница очень хорошо объясняется в этом ответе ), вам нужно использовать
std::copy
из
<algorithm>
:
std::string str = "foo";
uint8_t arr[32];
std::copy(str.begin(), str.end(), std::begin(arr));