Первая ошибка здесь:
while(*t!="\0")
Вы должны использовать одинарные кавычки для символов - как while(*t!='\0')
. Чтобы сделать это проще, вы можете просто написать while(*t)
.
Помимо этой проблемы также обратите внимание, что вы никогда не обновляете t
. Вам нужно добавить ++t;
внутри цикла.
Вторая ошибка здесь:
cara[i]=cara[i]*pow(2,m);
Символы '0'
и '1'
do not имеют целочисленные значения, равные нулю и единице, поэтому расчет выполнен неверно. Символ '0'
имеет целочисленное значение 48, а символ '1'
имеет целочисленное значение 49 (см. https://da.wikipedia.org/wiki/ASCII), поэтому результат будет полностью неверным.
Чтобы получить более правильный расчет, вам нужно:
cara[i] = (cara[i] - '0') * pow(2,m);
Однако, плохая идея сохранять эти промежуточные результаты обратно в char
. char
не может содержать значения выше 127 (или 255, если char
не подписано), поэтому у вас скоро будет целочисленное переполнение.
Как правило, нет необходимости сохранять эти промежуточные результаты, и нет необходимости в pow
, так как вы можете просто умножить на 2 для каждой двоичной цифры.
Попробуй так:
#include <stdio.h>
int main(void) {
char *bin_str = "11001";
unsigned result = 0;
while (*bin_str)
{
result *= 2;
result += *bin_str == '1' ? 1 : 0;
++bin_str;
}
printf("%d\n", result);
return 0;
}