C++ hex2dec string function
#include <iostream>
#include <sstream>
#include <cstdio>
using namespace std;
unsigned long long hex2dec(const string &input);
unsigned long long hex2dec_c(const char*s, int length);
int main(int argc, char *argv[])
{
string i1 = "FF";
string i2 = "7FFFFFFF";
string i3 = "FFFFFFFF";
string i4 = "1004CCB00";//if hex2dec returned int, this would overflow it
cout << i1 << "," << hex2dec(i1)<< "," << hex2dec_c(i1.c_str(),i1.length()) << endl;
cout << i2 << "," << hex2dec(i2)<< "," << hex2dec_c(i2.c_str(),i2.length()) << endl;
cout << i3 << "," << hex2dec(i3)<< "," << hex2dec_c(i3.c_str(),i3.length()) << endl;
cout << i4 << "," << hex2dec(i4)<< "," << hex2dec_c(i4.c_str(),i4.length()) << endl;
return 0;
}
unsigned long long hex2dec(const string &input)
{
unsigned long long n;
stringstream ss;
ss << hex << uppercase << input;
//ss << hex << lowercase << input;
ss >> n;
return n;
}
unsigned long long hex2dec_c(const char*s, int length)
{
unsigned long long n=0;
for(int i=0,v=0; i<length && s[i]!='\0'; i++)
{
int v;
if ('a' <= s[i] && s[i] <='f') { v=s[i]-97+10; }
else if ('A' <= s[i] && s[i] <='F') { v=s[i]-65+10; }
else if ('0' <= s[i] && s[i] <='9') { v=s[i]-48; }
else break;
n*=16;
n+=v;
}
return n;
}FF,255,255 7FFFFFFF,2147483647,2147483647 FFFFFFFF,4294967295,4294967295 1004CCB00,4300000000,4300000000
code snippets are licensed under Creative Commons CC-By-SA 3.0 (unless otherwise specified)
|