Вот пример кода, который у меня получился, я думаю, что иду в правильном направлении, но не понимаю, что именно что нужно сделать, чтобы правильно сдвинуть более 1 байта.
Код: Выделить всё
#include
#include
#include
#include
std::vector Shift(std::vector& src, int val, bool left) {
std::vector res(src.size());
int byteShift = val >> 3;
uint8_t mask = ~(0b00001110);
if (byteShift >= src.size())
return res;
val = 3;
res.insert(res.begin(), src.begin(), src.begin() + 17); // Copy the first 17 bytes unchanged
int j = 1;
for (size_t i = 17; i < src.size()-j; i++) {
if ((i - 16) % 32 == 0 && i != 17) {
res[i + j] = static_cast(((src[i + j] &= mask)>>3) | (src[i + j + 1] > val) | (res[i + j] > val) | (src[i + j]
Подробнее здесь: [url]https://stackoverflow.com/questions/78297396/bits-and-bytes-shifts-c[/url]