Как переместить элемент из массива в переменную в C - PullRequest
1 голос
/ 07 февраля 2012

У меня есть Array as (заполненный нулями и единицами) -> ArrayWithContent [5] = {1,0,0,1,1};Теперь я хочу, чтобы это было преобразовано в переменную, чтобы я мог прочитать общее значение этого.

0001 0011 = 19

for(i=0; i<5; i++)
{
    OneValue = ArrayWithContent[i]; 
    Variable = OneValue;
    Variable >>= 1;             // Send the zero or one to right.... continue to fill it up
}

Отображение содержимого переменной Теперь я хочу, чтобы она отображаласьзначение 19.

Я знаю, что я делаю это неправильно, каков правильный путь?Указатели и адреса?

Ответы [ 3 ]

5 голосов
/ 07 февраля 2012
Variable = 0;
for (i = 0; i < 5; i++)
{
    Variable = (Variable << 1) | ArrayWithContent[i];
}

Здесь:

  • (Variable << 1) сдвигает текущее значение Variable на один бит влево.
  • ... | ArrayWithContent[i] заменяет младший бит сдвинутого значения на ArrayWithContent[i].
  • Наконец, Variable = ... присваивает результат обратно Variable.
1 голос
/ 07 февраля 2012

Вот ваш цикл, исправленный:

for(i=0; i<5; i++)
{
    OneValue = ArrayWithContent[i]; 
    Variable <<= 1;     // You want to shift to the left to keep the previous value.
    Variable |= OneValue; // You need to OR the value, else you'd erase the previous value.
}
0 голосов
/ 07 февраля 2012

Если у вас есть данные в формате с прямым порядком байтов,
... либо сдвиньте каждое значение на правильную величину и ИЛИ все вместе

value = 0;
for (i = 0; i < nelems; i++) {
    value |= (ArrayWithContent[i] << (nelems - i - 1));
}

... или продолжайте сдвигать текущее значение на 1 бит и ИЛИ следующий бит в

value = 0;
for (i = 0; i < nelems; i++) {
    value <<= 1;
    value |= a[i];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...