16進数文字列を10進数にする計算


ArduinoUNOでIDE1.8.7を使用しています。

表題の計算を以下のように行いました。

[code]

    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;
    }
    
[/code]

メインで

[code]

    int a;
    a = Dtoi("111",0);
    
[/code]

のように実行すると  
結果が

[code]

    0
    255
    271
    272
    
[/code]

`a = Dtoi("11",0);`だと結果が

[code]

    0
    15
    16
    
[/code]

`a = Dtoi("1",0);`だと結果が

[code]

    0
    1
    
[/code]

と表示されます。

2桁以上だと-1されるようなのですがなぜでしょうか？




おそらく、pow関数の結果がビット落ちしてるんじゃないかと思われます  
そこんところは、  
sum=sum*16+x;  
にしてみよう




おそらく、pow関数の結果がビット落ちしてるんじゃないかと思われます  
そこんところは、  
sum=sum*16+x;  
にしてみよう

