fork download
  1. /* strtoul binary-to-decimal example */
  2.  
  3.  
  4. #include<iostream>
  5. #include<cstring>
  6. #include<cstdint>
  7. #include<cstdlib>
  8.  
  9. #define BINARY_BASE 2 /*Defining binary base*/
  10. #define OCTAL_BASE 8 /*Defining octal base*/
  11. #define DECIMAL_BASE 10 /*Defining decimal base*/
  12. #define HEXA_BASE 16 /*Defining hexa-decimal base*/
  13. #define BASE32_BASE 32 /*Defining base32 base*/
  14.  
  15. bool isValidNumber4Base(const char* __numStr,int __base)
  16. {
  17.  
  18. const char *__validBinary = "01";
  19. const char *__validOctal = "01234567";
  20. const char *__validDecimal = "0123456789";
  21. const char *__validHex = "0123456789abcdefxABCDEFX";
  22. const char *__validBase32 = "0123456789abcdefghijklmnopqrstuvABCDEFGHIJKLMNOPQRSTUV";
  23. const char *__validNumber = NULL;
  24.  
  25. __validNumber = (__base == BINARY_BASE) ? __validBinary : ((__base == OCTAL_BASE) ? __validOctal :
  26. (__base == DECIMAL_BASE) ? __validDecimal : (__base == HEXA_BASE) ? __validHex : (__base == BASE32_BASE) ? __validBase32 : NULL);
  27.  
  28. if(__validNumber == NULL)
  29. {
  30. std::cerr<<"Invalid base encountered"<<std::endl;
  31. exit(EXIT_FAILURE);
  32. }
  33.  
  34. return (!__numStr[strspn(__numStr,__validNumber)]) ? true : false;
  35. }
  36.  
  37. uint64_t getDecimal4mBinary(const char *__binaryStr)
  38. {
  39. if (isValidNumber4Base(__binaryStr,BINARY_BASE))
  40. {
  41. char *__endBinaryStr;
  42. return strtoull(__binaryStr,&__endBinaryStr,BINARY_BASE);
  43. }
  44.  
  45. else
  46. {
  47. std::cerr<<"Invalid binary-number encountered"<<std::endl;
  48. exit(EXIT_FAILURE);
  49. }
  50. }
  51.  
  52. /*Test Method */
  53. int main ()
  54. {
  55. char *binary_str = "10000001";
  56. uint64_t dec4mBinary = getDecimal4mBinary(binary_str);
  57. std::cout<<"Decimal equivalent\n"<<dec4mBinary<<std::endl;
  58. return 0;
  59. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
Decimal equivalent
129