/* strtoul binary-to-decimal example */
#include<iostream>
#include<cstring>
#include<cstdint>
#include<cstdlib>
#define BINARY_BASE 2 /*Defining binary base*/
#define OCTAL_BASE 8 /*Defining octal base*/
#define DECIMAL_BASE 10 /*Defining decimal base*/
#define HEXA_BASE 16 /*Defining hexa-decimal base*/
#define BASE32_BASE 32 /*Defining base32 base*/
bool isValidNumber4Base(const char* __numStr,int __base)
{
const char *__validBinary = "01";
const char *__validOctal = "01234567";
const char *__validDecimal = "0123456789";
const char *__validHex = "0123456789abcdefxABCDEFX";
const char *__validBase32 = "0123456789abcdefghijklmnopqrstuvABCDEFGHIJKLMNOPQRSTUV";
const char *__validNumber = NULL;
__validNumber = (__base == BINARY_BASE) ? __validBinary : ((__base == OCTAL_BASE) ? __validOctal :
(__base == DECIMAL_BASE) ? __validDecimal : (__base == HEXA_BASE) ? __validHex : (__base == BASE32_BASE) ? __validBase32 : NULL);
if(__validNumber == NULL)
{
std::cerr<<"Invalid base encountered"<<std::endl;
exit(EXIT_FAILURE);
}
return (!__numStr[strspn(__numStr,__validNumber)]) ? true : false;
}
uint64_t getDecimal4mBinary(const char *__binaryStr)
{
if (isValidNumber4Base(__binaryStr,BINARY_BASE))
{
char *__endBinaryStr;
return strtoull(__binaryStr,&__endBinaryStr,BINARY_BASE);
}
else
{
std::cerr<<"Invalid binary-number encountered"<<std::endl;
exit(EXIT_FAILURE);
}
}
/*Test Method */
int main ()
{
char *binary_str = "10000001";
uint64_t dec4mBinary = getDecimal4mBinary(binary_str);
std::cout<<"Decimal equivalent\n"<<dec4mBinary<<std::endl;
return 0;
}