двоичный массив int * в эквивалент int - PullRequest
0 голосов
/ 09 декабря 2018

Я довольно новичок в программировании на C и мне интересно, есть ли метод в существующей библиотеке, который может помочь мне в этой конкретной ситуации, или мне нужно написать свой собственный метод для достижения желаемых результатов.

По сути, у меня будет массив int *, представляющий двоичное число.Например:

|1|0|1|1|

В идеале я хотел бы, чтобы из этого массива было возвращено 11.

Есть ли в C метод, который принимает массив int * и возвращает int эквивалентномера хранятся в нем?Или это то, что мне нужно написать

Ответы [ 3 ]

0 голосов
/ 09 декабря 2018

Нет, вы должны сделать это самостоятельно.С оператором <<. </p>

0 голосов
/ 09 декабря 2018

Моя реализация

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

uint8_t u8_from_ubits(uint8_t* bits)
{
    int i;
    uint8_t num = 0;

    for(i = 0; i < 8; i++)
        num |= bits[7-i] << i; //8-1=7
    return num;
}

uint8_t bits[8] = {
    0,0,0,0,1,0,1,1
};

int main()
{
    printf("%d\n",u8_from_ubits(bits));
    return 0;
}

Для большего количества бит просто измените номер бита в функции

0 голосов
/ 09 декабря 2018

Это то, что вам нужно написать самостоятельно.Поскольку для представления чисел таким способом не существует распространенных реальных случаев использования, стандартная библиотека C не имеет функции для ее обработки.

Однако это хорошее упражнение для изучения битовых сдвигов.Читайте о << и >> операторах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...