Двоичный битовый шаблон в строке, преобразованный в шестнадцатеричное число в C

Я новичок в C и хотел бы помочь с проблемой, которая у меня есть.

Допустим, у меня есть строка, содержащая 32-битный шаблон, например «10001100110100010101100111000000».

Я застрял в том, как создать шестнадцатеричное число для битового шаблона в строке, чтобы число содержало группы из 4 бит.

Например, шестнадцатеричное представление, которое мне требуется для приведенной выше строки, будет 8CD159C0.


person Ryan Gibson    schedule 21.01.2014    source источник


Ответы (3)


Вы можете преобразовать двоичную строку в число с strtoul(), используя базу 2:

char *bits = "10001100110100010101100111000000";
unsigned num = strtoul(bits, NULL, 2);

а затем преобразовать число в шестнадцатеричную строку с помощью snprintf():

char hex[9];
snprintf(hex, sizeof(hex), "%08X", num);

printf("%s\n", hex);
// Output: 8CD159C0

(Это предполагает, что unsigned int имеет по крайней мере 32 бита на вашей платформе. В противном случае используйте unsigned long.)

person Martin R    schedule 21.01.2014

Йоси почти понял. Но на самом деле это должно быть беззнаковое целое число.

char *bin="10001100110100010101100111000000";
unsigned int num = 0;
for (char *a = bin; *a; ++a)
    num = (num << 1) | (*a - '0');
printf("%X\n", num);
person ooga    schedule 21.01.2014

Попробуй это:

char *bin="10001100110100010101100111000000";
char *a = bin;
int num = 0;
do {
    int b = *a=='1'?1:0;
    num = (num<<1)|b;
    a++;
} while (*a);
printf("%X\n", num);
person Yosi    schedule 21.01.2014
comment
Я забыл добавить, что мне нужно хранить шестнадцатеричное число в виде строки. Как бы я это сделал? Также не могли бы вы объяснить 5-ю и 6-ю строки, пожалуйста? - person Ryan Gibson; 22.01.2014