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されるようなのですがなぜでしょうか?