Скопируйте basic_string<char16_t> в вектор<uint8_t>
Пожалуйста, предложите эффективный способ скопировать байты из basic_string
Я не занимаюсь кодированием, а просто хочу скопировать байты в байтовый массив. Позже это будет интерпретировано с правильной кодировкой в нисходящем направлении.
Благодарю.
1 ответ
Один из вариантов - получить указатель данных, привести его к новому типу и присвоить его целевому вектору:
std::basic_string<char16_t> src;
const uint8_t *begin = reinterpret_cast<uint8_t const*>(src.data());
const uint8_t *end = reinterpret_cast<uint8_t const*>(src.data() + src.size());
std::vector<uint8_t> dst(begin,end);
Это один из немногих случаев, когда reinterpret_cast
это совершенно правильный выбор. Из cppreference (основные моменты добавлены мной):
В отличие от
static_cast
, но, какconst_cast
выражение reinterpret_cast не компилируется ни в какие инструкции процессора. Это чисто директива компилятора, которая инструктирует компилятор обрабатывать последовательность битов (представление объекта) выражения, как если бы он имел типnew_type
,