Скажем, у меня есть массив символов, и я хочу сдвинуть N бит влево на каждый байт, перенося влево, поэтому будут потеряны только N бит первого символа.
Пример: kxmo
смещенный на 3 бита влево должен стать X@hx
Это то, что у меня есть в настоящее время, но оно работает не так, как ожидалось:
#include <stdio.h>
int main(void) {
//shift the array with length *len* *shift* bits to the left
int len = 4, shift = 3;
unsigned char a[len] = "kxmo";
unsigned char b[len]; //X@hx
unsigned char tmp = 0, tmp2 = 0;
for(int i = len - 1; i > 0; i--) {
tmp = 0 | (a[i] << shift);
b[i] = a[i];
tmp2 = 0 | (a[i - 1] << shift);
b[i - 1] = (a[i - 1] << shift) ^ tmp;
}
printf("old: %s | new: %s\n", a, b);
return 0;
}
Где я терплю поражение?
Редактировать:
Вот что я получаю прямо сейчас: old: kxmo | new: �xmo
�xmo
, чего я не ожидал. И я попробовал код, который написал в своем вопросе. - person alexandernst   schedule 05.09.20150 | whatever
совпадает сwhatever
. Как вы рассчитали результат пробы? Ваш код делает то же самое? Подсказка: XOR здесь бесполезен. - person too honest for this site   schedule 05.09.2015