Ваша проблема с
output.write (dataShiftLeft, sizeof (data));
std::ostream::write
занимает const char*
, и вы предоставляете valarray<char>
, вот почему компилятор жалуется.
Вам нужно перебрать valarray
и написать элементы один за другим:
for (auto c : dataShiftLeft) output << c;
Но я уверен, что вы будетелучше с std::array
и std::rotate
алгоритмом, по следующим направлениям:
std::array<char, 1024> buffer;
// ...
file.read(buffer.data(), buffer.size());
auto trailing_zeros = std::rotate(buffer.begin(), std::next(buffer.begin(), 1), buffer.end()); // or
std::fill(trailing_zeros, buffer.end(), 0);