16進数文字列を10進数にする計算
ArduinoUNOでIDE1.8.7を使用しています。
表題の計算を以下のように行いました。
int Dtoi(String s,int idx){
int sum = 0,x,sl;
sl = s.length();
for(int i = 0;i < sl;i++){
if(s.charAt((idx + i)) > 55){
x = s.charAt((idx + i)) - 55;
}else{
x = s.charAt((idx + i)) - 48;
}
Serial.print(sum);
Serial.println();
sum += x * pow(16,(sl-(i+1)));
}
Serial.print(sum);
return sum;
}
メインで
int a;
a = Dtoi("111",0);
のように実行すると
結果が
0
255
271
272
a = Dtoi("11",0);
だと結果が
0
15
16
a = Dtoi("1",0);
だと結果が
0
1
と表示されます。
2桁以上だと-1されるようなのですがなぜでしょうか?