Преобразование двоичной строки в десятичную

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

Вот значение fullCard.

fullCard = "1000000100000101111101" 

Вот как это должно выглядеть после преобразования в десятичную

 fullCardInt = 2113917 

Main.ino

 String fullCard; // binary value full card number int fullCardInt = bin2dec(const_cast(fullCard.c_str())); // I get -1 which is a failure. serial.print(fullCardInt); int bin2dec(const char *bin) { int result=0; for(;*bin;bin++) { if((*bin!='0')&&(*bin!='1')) return -1; result=result*2+(*bin-'0'); if(result<=0) return -1; } return result; } 

1000000100000101111101 имеет 22 бита.

int на Arduino – 16 бит.

Решение заключается в использовании long (32-разрядных) вместо int .

так как эта функция переносима, вы ее протестировали? вы помогли понять, что происходит? Мы не находимся здесь для просмотра кода или для отладки кода.

 #include  int bin2dec(const char *bin) { int result=0; for(;*bin;bin++) { if((*bin!='0')&&(*bin!='1')) return -1; result=result*2+(*bin-'0'); if(result<=0) return -1; } return result; } int main ( void ) { printf("%d\n",bin2dec("1000000100000101111101")); return(0); } 

В результате я получаю 2113917.

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

ahh yes, плюс один ответ gre_gor, который является проблемой.

 #include  short bin2dec(const char *bin) { short result=0; for(;*bin;bin++) { if((*bin!='0')&&(*bin!='1')) return -1; result=result*2+(*bin-'0'); if(result<=0) return -1; } return result; } int main ( void ) { printf("%d\n",bin2dec("1000000100000101111101")); return(0); } 

результат -1, потому что у вас есть эта строка в нем

  if(result<=0) return -1; 

который ограничивает вас размером int - 1 бит. поэтому 15 для 16 бит int и 31 для 32 бит.

 #include  short bin2dec(const char *bin) { short result=0; for(;*bin;bin++) { if((*bin!='0')&&(*bin!='1')) { printf("here\n"); return -1; } result=result*2+(*bin-'0'); printf("0x%04X\n",result); if(result<=0) { printf("there\n"); return -1; } } return result; } int main ( void ) { printf("%d\n",bin2dec("1000000100000101111101")); return(0); } 0x0001 0x0002 0x0004 0x0008 0x0010 0x0020 0x0040 0x0081 0x0102 0x0204 0x0408 0x0810 0x1020 0x2041 0x4082 0xFFFF8105 there -1 

помните, плюс один / принять ответ gre_gor не мой ...