簡體   English   中英

將String轉換為unsigned long的問題

[英]Issue with converting String to unsigned long

將char字符串數組轉換為unsigned long時,我遇到了一個小問題。 這是我對executeCommand()的輸入。

0001000118218; 326

這就是我得到的。

收到命令:0001000118218; 326

傳輸代碼:1821

傳輸周期:32

我不明白為什么最后一位數字會丟失...

#define id_length 4
#define command_length 4
const String my_id = "0001";
//Command execution methods
void executeCommand(String inputData) {
  if(!my_id.equals(inputData.substring(0, id_length))) {
    return;
  }

  Serial.print("Received command: ");
  Serial.println(inputData);
  String command = inputData.substring(id_length, id_length + command_length);
  String parameters = inputData.substring(id_length + command_length);


  for (int i = 0; i < 3; i++) {
  if(command == "0001") {    //RF power command
    unsigned long rfid_long;
    unsigned long periodid_long;
    char rfid[parameters.indexOf(';')];
    char periodid[3];
    parameters.substring(0, parameters.indexOf(';')).toCharArray(rfid, parameters.indexOf(';'));
    parameters.substring(parameters.indexOf(';') + 1).toCharArray(periodid, 3);
    rfid_long = strtoul(rfid, NULL, 10);
    periodid_long = strtoul(periodid, NULL, 10);
    sendRF(rfid_long, periodid_long);
  }
  else {
    Serial.println("Unknown command received");
  }
  delay(10);
  }
}

void sendRF(unsigned long transmitCode, unsigned int transmitPeriod) {
 //digitalWrite(transmitLedPin, HIGH);
 Serial.print("transmit code: ");
 Serial.println(transmitCode);
 Serial.print("transmit period: ");
 Serial.println(transmitPeriod);
 RemoteSwitch::sendTelegram(generateTelegram(transmitCode, transmitPeriod), rfSubmitPin);
 //digitalWrite(transmitLedPin, LOW);
}
char periodid[3];

如果要包含長度為3的字符串, char periodid[4]char periodid[4] 3個元素表示內容,1個元素表示零終止符。

您還必須將其更改為toCharArray(periodid, 3); toCharArray(periodid, 4); 或更好, toCharArray(periodid, sizeof(periodid));

如果將命令轉換為字符數組並使用strchr怎么辦?

char* separator = strchr(command, ';');
if (separator == NULL) return;

char* rfid = command + id_length;
char* periodid = separator + 1;

unsigned long rfid_long = strtoul(rfid, &separator, 10);
unsigned long periodid_long = strtoul(periodid, NULL, 10);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM