Следующий код сместит массив байтов влево.Число сдвигаемых битов должно составлять от 1 до 7. Для сдвига более чем на 7 потребуется дополнительный код.
void shiftArrayLeft(unsigned char array[], int length, int shift) // 1 <= shift <= 7
{
unsigned char carry = 0; // no carry into the first byte
for (int i = length-1; i >= 0; i--)
{
unsigned char temp = array[i]; // save the value
array[i] = (array[i] << shift) | carry; // update the array element
carry = temp >> (8 - shift); // compute the new carry
}
}
Работает путем сохранения старого значения из массива.Затем обновите текущий элемент массива, сдвинув его и выполнив логическое ИЛИ перенос из предыдущего байта.Затем вычислите новый перенос (старшие биты исходного значения).
Функция может быть вызвана с кодом, подобным этому
unsigned char array[] = { 0x00, 0x00, 0x00, 0xAA };
int length = sizeof(array) / sizeof(array[0]);
shiftArrayLeft(array, length, 1);
, который изменит массив на { 0x00, 0x00, 0x01, 0x54 }