「19485」、「10011010」、「AF294EC」などの文字列を処理するこのコードがあります...
long long toDecimalFromString(string value, Format format){
long long dec = 0;
for (int i = value.size() - 1; i >= 0; i--) {
char ch = value.at(i);
int val = int(ch);
if (ch >= '0' && ch <= '9') {
val = val - 48;
} else {
val = val - 55;
}
dec = dec + val * (long long)(pow((int) format, (value.size() - 1) - i));
}
return dec;
}
このコードは、2 の補数でないすべての値に対して機能します。10 進数で負の数になるはずの 16 進文字列を渡すと、正しい結果が得られません。