我正在使用一些第三方库来处理某些第三方硬件。库通过串行连接与硬件通信。使用库我通过串行接口将数据发送到硬件并获得响应,该响应存储在数组中:
// 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
}
我是否需要将其转换为字符串,或者与其他字符数组进行比较?
答案 0 :(得分:2)
Here are string.h
中用于字符串/内存比较的所有函数,可以与arduino一起使用。您可以使用strcmp
或memcmp
。
请注意,只需使用==
运算符,就无法在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)