みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

string型文字列を数値に変更したい

サーバーのポート番号を書かれたファイルをmicro SDカードにいれて、ESP-WROOM-32で読み出して、そのファイルからそのポート番号をint Portという変数に格納したいと思っています。

そのために次のようなプログラムを作成しました。

const int port = 0;

bool getAwsServerPort(fs::FS &fs, String path) {
//File file = SD_MMC.open(path, "r");
File file = fs.open(path, "r");

if (!file) {
Serial.printf("Can't Open File %s \n", path);
return false;
}
while (file.available()) {
String line = file.readStringUntil('\n');
line = line.substring(0, line.indexOf('#'));
//Serial.printf("DeviceID: %s \n", line.c_str());

//String deviceCheck = line.substring(0, line.indexOf("device name"));

if (line.indexOf("aws server port") != -1) {
String deviceID = line.substring(line.indexOf(':')+1); deviceID.trim();
Serial.printf("aws server port: %s \n", deviceID.c_str());
port = stoi(deviceID.c_str());
return true;
}

}
return false;
}



この関数を
getAwsServer(SD, "/config");

このコードで呼び出した際に、次のようなエラーが発生します。

(エラー内容)
/Users/myname/Google Drive/wifiAutoConnection/wifiAutoConnection.ino: In function 'bool getAwsServerPort(fs::FS&, String)':
wifiAutoConnection:364:35: error: 'stoi' was not declared in this scope
port = stoi(deviceID.c_str());

文字列から数値への変換で検索してみたところstoiというのがあると聞いて、やってみたのですが、このようなエラーが出てくるのですが、解決方法などご教示頂きますよう、よろしくお願い致します。

投稿日時 - 2019-02-06 07:57:08

QNo.9585114

すぐに回答ほしいです

質問者が選んだベストアンサー

エラー内容からは、stoiという関数が定義されていないことが分かります。
C++ではstoi関数が定義されていますが、arduinoでは定義されていないようです。

代わりにtoIntを使われてはいかがでしょうか?
https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/toint/

投稿日時 - 2019-02-06 08:56:16

お礼

回答頂きありがとうございます。

port = deviceID.toInt();
これで、portに8883の数値を入れることができたことがシリアルモニタでわかりました。
ただ、元は
const int port = 8883;

というので宣言されていましたが、
long port;
という宣言でないとコンパイルが通らなかったのが少し気にかかりますが、とりあえずこれで行ってみます。
助かります。

投稿日時 - 2019-02-06 16:18:55

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問