C++ 字符串上的true条件检查

C++ 字符串上的true条件检查,c++,arrays,string,char,compare,C++,Arrays,String,Char,Compare,晚安 Im目前正在检查传入字符缓冲区中的真实条件,如下所示。下面我在寻找一个可编辑字符串中的19740329000000000123456789ABC0000 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

晚安

Im目前正在检查传入字符缓冲区中的真实条件,如下所示。下面我在寻找一个可编辑字符串中的19740329000000000123456789ABC0000

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
} 

它确实有效,但有没有更好的方法来比较字符串段并将其与已知段进行比较。

您可以使用memcmp并将缓冲区与硬编码数组进行比较。 我还添加了一个方便的函数,可以返回静态数组中的项数(如果您构建在windows上,您可以直接使用)。从C++ 17开始,可以使用.< /P>
#include//有memcmp的声明
模板
constexpr size_t countof(t(&array)[SizeOfArray]){return SizeOfArray;}
实际代码:


uint8_t期望值[]={0x19,0x74,0x03,0x29,…};
uint8_t buf[BLE_MAX_ADV_DATA_LEN];
如果(0==memcmp(buf,expectedValues,countof(expectedValues)))
{
//缓冲区包含预期值
}

我会将比较封装到一个函数中,这样您的if语句就不会那么臃肿,但我不知道如何更好地消除所有比较。您还可以将十六进制值转换为相应的ascii字符,然后使用字符串比较函数,但是信息会丢失请不要使用!您只需创建第二个缓冲区,其中只包含要比较的数据,然后使用,就可以解决您的问题。这不是一个有效的答案,因为这只是MS,而问题不是MS。在标准C++中,我们有STD::计数和STD::CurtTyIF.它是如何非标准的?我已经提供了countof的声明。对不起,我指的是std::size。为什么不用呢?CONTROF的名字是误导(误导我),因为我们有STD::在C++库中计数,它做了其他事情。@ NADI我不知道,每天你都学到一些新东西。谢谢!:)。我已经更新了答案。在跨平台的C++之前有17种选择。OT:是的,C++每一个新的标准都变得更加漂亮(当然是IMO),我希望它能保持这样的状态。C++17甚至有std::filesystem;)哇!