Преобразование строки в массив 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));
Другие вопросы по тегам