Пожалуйста, предложите эффективный способ скопировать байты из basic_string< char16_t> к вектору< uint8_t>.
Я не занимаюсь кодированием, а просто хочу скопировать байты в байтовый массив. Позже это будет интерпретировано с правильной кодировкой в нисходящем направлении.
Благодарю.
Один из вариантов — получить указатель данных, привести его к новому типу и назначить его целевому вектору:
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
.