gpt4 book ai didi

c - 拆分以逗号分隔的整数字符串

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:31 25 4
gpt4 key购买 nike

我的背景不是 C(它是在 Real Studio - 类似于 VB),而且我真的很难拆分逗号分隔的字符串,因为我不习惯低级字符串处理。

我正在通过串行向 Arduino 发送字符串。这些字符串是某种格式的命令。例如:

@20,2000,5!
@10,423,0!

'@' 是表示新命令的 header ,'!'是标记命令结束的终止页脚。 '@' 之后的第一个整数是命令 id,其余整数是数据(作为数据传递的整数数量可以是 0 - 10 之间的任何整数)。

我写了一个草图,它获取命令(去掉“@”和“!”)并在有命令要处理时调用名为 handleCommand() 的函数。问题是,我真的不知道如何拆分这个命令来处理它!

这是草图代码:

String command; // a string to hold the incoming command
boolean commandReceived = false; // whether the command has been received in full

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
// main loop
handleCommand();
}

void serialEvent(){
while (Serial.available()) {
// all we do is construct the incoming command to be handled in the main loop

// get the incoming byte from the serial stream
char incomingByte = (char)Serial.read();

if (incomingByte == '!')
{
// marks the end of a command
commandReceived = true;
return;
}
else if (incomingByte == '@')
{
// marks the start of a new command
command = "";
commandReceived = false;
return;
}
else
{
command += incomingByte;
return;
}

}
}

void handleCommand() {

if (!commandReceived) return; // no command to handle

// variables to hold the command id and the command data
int id;
int data[9];

// NOT SURE WHAT TO DO HERE!!

// flag that we've handled the command
commandReceived = false;
}

假设我的 PC 向 Arduino 发送字符串“@20,2000,5!”。我的草图以包含“20,2000,5”的字符串变量(称为 command)结束,commandRecieved bool 变量设置为 True,因此 handleCommand () 函数被调用。

我想在(目前无用的)handleCommand() 函数中做的是将 20 分配给一个名为 id 的变量,将 2000 和 5 分配给一个整数数组称为 data,即:data[0] = 2000data[1] = 5

我读过有关 strtok()atoi() 的内容,但坦率地说,我只是无法理解它们和指针的概念。我确信我的 Arduino 草图也可以优化。

最佳答案

由于您使用的是 Arduino 核心 String 类型,因此 strtok 和其他 string.h 函数不合适。请注意,您可以更改您的代码以改为使用标准的 C 空终止字符串,但使用 Arduino String 可以让您在不使用指针的情况下执行此操作。

String type 给你 indexOfsubstring .

假设一个带有 @! 的字符串被剥离,找到你的命令和参数看起来像这样:

// given: String command
int data[MAX_ARGS];
int numArgs = 0;

int beginIdx = 0;
int idx = command.indexOf(",");

String arg;
char charBuffer[16];

while (idx != -1)
{
arg = command.substring(beginIdx, idx);
arg.toCharArray(charBuffer, 16);

// add error handling for atoi:
data[numArgs++] = atoi(charBuffer);
beginIdx = idx + 1;
idx = command.indexOf(",", beginIdx);
}

data[numArgs++] = command.substring(beginIdx);

这将在 data 数组中为您提供整个命令,包括 data[0] 处的命令编号,而您已指定只有 args 应该是在数据中。但必要的更改很小。

关于c - 拆分以逗号分隔的整数字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11915914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com