1

我正在为一些第三方硬件使用一些第三方库。库通过串行连接与硬件通信。使用库,我通过串行接口将数据发送到硬件并获得响应,该响应存储在数组中:

// This is the byte array declared in the third party libraries
// that stores data sent back from the external hardware
byte comm_buf[201];

/* I send data to hardware, comm_buf gets filled */

// Printing out the received data via a second serial line to which
// I have a serial monitor to see the data

for (int i = 0; i <= 50; i++) {
  Serial.print(gsm.comm_buf[i]);
}    

// This is printed via the second monitoring serial connection (without spaces)
13 10 43 67 82 69 71 58 32 48 44 51 13 10 13 10 79 75 13 10 00

// It is the decimal ascii codes for the following text
+CREG: 0,3 

如何将字节数组转换为可以在代码中评估的格式,以便可以执行类似以下伪代码的操作;

byte comm_buf[201];

/* I send data to hardware, comm_buf gets filled */

if (comm_buf[] == "CREG: 0,3" ) {
  // do stuff here
}

我是否需要以某种方式将其转换为字符串,或者与另一个 char 数组进行比较?

4

1 回答 1

2

以下是string.h您可以与 arduino 一起使用的用于字符串/内存比较的所有函数。您可以使用strcmpmemcmp

请注意,您不能通过简单地使用==运算符来比较 C 中的两个字符串。您只需比较两个内存指针的值。

这是缓冲区内的比较示例:

if (strcmp((const char*)gsm.comm_buf, "\r\n+CREG: 0,3\r\n\r\nOK\n")==0)
{
    Serial.print("abc");
}

如果您收到的消息是空字节终止的,您可以使用 strcmp,否则您将不得不使用 memcmp 来完成这项工作。

对于这两个函数,您必须检查返回值是否为零,那么这些字符串是否相等。

如果您想比较的不是缓冲区的第一个字节(索引为零),而是例如第五个(索引 4),您可以将 4 添加到您的指针:

if (strcmp((const char*)gsm.comm_buf + 4, "\r\n+CREG: 0,3\r\n\r\nOK\n")==0)
于 2013-08-01T18:42:29.583 回答