Haruyuki Mohri

毛利春幸のブログです。

Androidではstd::stoi()が使えないatoi()は使える。

C++Builder 10.2 Tokyo を使ってAndroidビルドする場合
std::stoi()は使えない。
そもそもAndroid NDK側でも使えないみたいです。

方法は色々あると思うけど、下記のような実装をしてみた。

namespace std
{
    int stoi1(const std::string& s)
    {
        auto i = std::forward<int>(strtol(s.c_str(),0,10));
        return i;
    };
    int stoi2(const std::wstring ws)
    {
        std::string s(ws.begin(), ws.end());
        return atoi(s.c_str());
    };


}

stoi1()strtol()を使った。stoi2()atoi()

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    //ボタンクリック イベント
    {
    std::string s = "-1100";
    auto i = std::stoi1(s);
    ShowMessage(IntToStr(i));
    }
//
    auto i = std::stoi2(std::wstring(Edit1->Text.begin(), Edit1->Text.end()));
    ShowMessage(IntToStr(i));
}

C++BuilderDelphiRTLが使えるので、StrToInt()を使えばそもそも問題は無いです。
f:id:mojeld:20171002135308p:plain