c - 将 String 转换为 unsigned long 的问题

标签 c arduino arrays unsigned-long-long-int

我在将 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]; 3 个元素用于内容,1 个用于零终止符。

您还必须将 toCharArray(periodid, 3); 更改为 toCharArray(periodid, 4); 或更好,toCharArray(periodid, sizeof (periodid));

关于c - 将 String 转换为 unsigned long 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144794/

相关文章:

python - 尝试将字符串数组转换为具有混合给定数据类型的数组时出现 ValueError

c++ - 关闭连接后,Valgrind 在 ssl 中显示内存泄漏

c - 为什么我在使用 malloc 并使用 sizeof 打印后没有得到正确的大小?

c - 管道实现停留在 dup2 命令

c - *++argv[1] 在 C 中是什么意思?

android - ADK 1.0 设备无法与 Jelly Bean 一起使用,为什么?

c++ - 在库中隐藏类的使用

c++ - 在函数中填充指针数组

ruby - 按另一个数组对数组进行排序

C - 指向结构体 "Segmentation fault (core dumped)"中的动态数组的指针