1

次のコードがあります。

char msg[10];
int len = acc.read(msg, sizeof(msg), 1); // This will read "R#" where # can be any number.
int number = getNumber(msg);

関数getNumberは次のようになります。

int getNumber(char* pMsg){
  Serial.println(positionMsg);
  positionMsg += 1;
  Serial.print('[');
  Serial.print(positionMsg);
  Serial.println(']');
}

この関数は次を出力します。

R115
[115]

メッセージ内の番号が の場合115。整数を返すにはどうすればよい115ですか?

私はJavaのバックグラウンドを持っていますが、ポインターを理解していません。

4

2 に答える 2

4

最も簡単なのは、atoi を使用することです: http://www.cplusplus.com/reference/cstdlib/atoi/

#include <cstdlib>  
int getNumber(char* pMsg){
    //assuming format is always R#
    return std::atoi((char*)(pMsg+1));
}

または、getNumber の代わりに atoi を直接使用できます...

于 2013-04-25T18:07:55.487 に答える
2

関数は int の戻り値の型を指定しているため、整数を返す必要があります。sscanf() を使用すると、1 回の関数呼び出しで他のデータ型を解析/フォーマットできます。

C++ の場合: sscanf() を使用する

    /* sscanf example */
    #include <cstdlib>

    int getNumber(char* pMsg){
        int result;
        ...
        sscanf (pMsg,"R%d",&result);  
        return result;
    }
于 2013-04-25T18:16:18.507 に答える