Да, здесь есть несколько избыточных переменных.
У вас есть и counter
, и i
, которые делают одно и то же и всегда содержат одно и то же значение. И у вас есть indexWrite
, что всегда равно половине (на целое деление) их обоих.
Вы также сдвигаетесь слишком далеко (16 бит, а не 8).
const std::size_t strLength = CalculateStringLength(str);
std::vector<uint16_t> arr16bit((strLength/2) + 1);
for (std::size_t i = 0; i < strLength; ++i)
{
arr16bit[i/2] <<= 8;
arr16bit[i/2] |= str[i];
}
Хотя я бы, вероятно, сделал это больше так, чтобы избежать N избыточных |=
операций:
const std::size_t strLength = CalculateStringLength(str);
std::vector<uint16_t> arr16bit((strLength/2) + 1);
for (std::size_t i = 0; i < strLength+1; i += 2)
{
arr16bit[i/2] = (str[i] << 8);
arr16bit[(i/2)+1] |= str[i+1];
}
Вы также можете sh рассмотреть простой std::copy
над весь чертов буфер, если ваша порядочность правильная.