60161


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


CC BY-SA 4.0
2019-10-31T09:33:19.913
60159
2019-11-01T09:54:44.127
2019-11-01T09:54:44.127
30217
30217
question
arduino
16進数文字列を10進数にする計算


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


CC BY-SA 4.0
2019-10-31T10:12:37.617
60161
2019-10-31T10:12:37.617
27481
60159
answer