【发布时间】:2019-12-10 07:56:04
【问题描述】:
早安
我目前正在检查传入字符缓冲区中的真实条件,如下所示。下面我在 BLE 字符串中寻找 197403290000000000123456789ABC0000。
uint8_t buf[BLE_MAX_ADV_DATA_LEN];
if ((buf[13]==0x19)&&(buf[14]==0x74)&&(buf[15]==0x03)&&(buf[16]==0x29)&&(buf[17]==0x00)&&(buf[18]==0x00)&&
(buf[19]==0x00)&&(buf[20]==0x00)&&(buf[21]==0x00)&&(buf[22]==0x00)&&(buf[23]==0x12)&&(buf[24]==0x34)&&
(buf[25]==0x56)&&(buf[26]==0x78)&&(buf[27]==0x9A)&&(buf[28]==0xBC)&&(buf[29]==0x00)&&(buf[30]==0x00)){
then do stuff
}
它确实有效,但是否有更好的方法来比较字符串段并将其与已知段进行比较。
【问题讨论】:
-
我会将比较封装到一个函数中,这样您的 if 语句就不会那么臃肿,但我不知道更好的方法来摆脱所有比较。您也可以将十六进制值转换为相应的 ascii 字符,然后使用字符串比较函数,但随后信息会丢失
-
请不要使用magic numbers!
-
您可以通过创建仅包含要比较的数据的第二个缓冲区来解决您的问题,然后使用
std::memcmp。
标签: c++ arrays string char compare