您可以使用C sscanf()
功能:
#include <stdio.h>
char line[] = "1:171,54,201"; // read a line from Bluetooth
int num1, num2, num3, num4;
if (sscanf(line, "%d:%d,%d,%d", &num1, &num2, &num3, &num4) == 4)
{
// use numbers as needed
}
或者C++的包装,std::sscanf()
:
#include <cstdio>
char line[] = "1:171,54,201"; // read a line from Bluetooth
int num1, num2, num3, num4;
if (std::sscanf(line, "%d:%d,%d,%d", &num1, &num2, &num3, &num4) == 4)
{
// use numbers as needed
}
如果您有可用(这显然Arduino的不)的STL,您可以使用STL std::istringstream
类改为:
#include <string>
#include <sstream>
std::string line = "1:171,54,201"; // read a line from Bluetooth
int num1, num2, num3, num4;
std::istringstream iss(line);
char ignore;
if (iss >> num1 >> ignore >> num2 >> ignore >> num3 >> ignore >> num4)
{
// use numbers as needed
}
或者:
#include <string>
#include <sstream>
bool readInt(std::istream &in, char delim, int &value)
{
std::string temp;
if (!std::getline(in, temp, delim)) return false;
return (std::istringstream(temp) >> value);
}
std::string line = "1:171,54,201"; // read a line from Bluetooth
int num1, num2, num3, num4;
std::istringstream iss(line);
if (readInt(iss, ':', num1) && readInt(iss, ',', num2) && readInt(iss, ',', num3) && readInt(iss, '\n', num4))
{
// use numbers as needed
}
你到目前为止尝试过什么? – Trevor