-1

私はC ++に非常に慣れていないので、Long変数をchar配列に変換してから、それぞれを出力したいと考えています。

この関数で使用するには変換が必要ですmodem.write(c); 。c 変数は char です。そして、私が持っている変数はlong GMT = now.unixtime();

それで、GMTをcharの配列に変換してからmodem.writeforサイクル内で呼び出すには、まず必要だと思いますか?

EDIT0:

H2CO3 との議論の後、彼は、modem.write は実際には uint8_t を想定しており、値は ASCII コードである必要があるため、データを送信する前により複雑なプロセスを実行する必要があると説明してくれました。

EDIT1:

while(Serial.available()){
  char c = Serial.read();
  modem.write(c);
}

long GMT = now.unixtime();
char* newCode = totp.getCode(GMT);

編集2:

char* buf;
snprintf(buf, sizeof buf, "%ld", GMT);
modem.write(buf);

エラー: 'char ' から 'uint8_t' への変換が無効です*

4

2 に答える 2

2

免責事項: 私は arduino SDK についてあまり知りません。そのため、これは、質問から推測できるすべての仮定の下で、単純な C で実行できる非常に一般的な方法にすぎません。ある種のarduino SDKを使用するより良い方法がおそらくあります。

また、指摘されているように、modem.write は char、またはバイト配列と size_t パラメータのいずれかを取るため、この回答をここに残して、人々が何かを学ぶことができるようにします。質問ですが、それでもそれ自体は正しいです(記載された仮定の下で)


modem.write(...) が実際\0に C++ 文字列ではなく、終了した char 配列を取ると仮定すると、これは c で実行できる方法です。

char *c = malloc(sizeof(long) + 1);

if (!c) {
  // handle ENOMEM
}

strncpy(c, (const char *)&GMT, 4);

c[sizeof(long)] = '\0';
于 2013-10-13T19:51:06.840 に答える