Bitshift Char Array - PullRequest
       22

Bitshift Char Array

3 голосов
/ 10 ноября 2011

Если я хочу сдвинуть бит целое число 5 на 3, поэтому int a = 5; int b = a << 3;, результат будет 40 в десятичном виде, поскольку 5 равно 101 и 40 равно 101000.

Что если, однако, у меня есть следующий массив char: 00000 00101 и, сдвинув бит влево на три, я хочу получить результат 00001 01000.Так что я хочу учесть отступы 0.Что вы предлагаете?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2011

Если вы имели в виду фактический массив char, вы можете использовать memmove() и memset():

char str[] = "0000000101";

int shift = 3;
int length = strlen(str);

memmove(str, str + shift,length - shift);
memset(str + length - shift,'0',shift);

//  Result:
//  "0000101000"
1 голос
/ 11 ноября 2011

Доступ к буферу с 16-битным указателем, используйте htons для решения проблем с порядком байтов

char c[2] = {0, 5};

uint16_t* p16 = (uint16_t*)c;

*p16 = htons((ntohs(*p16) << 3));
...