uint8_t a[10] = {0x12,0x13,0x14,0x15} uint8_t b[5] = {0x12,0x13} 怎么写查找a数组里有没有b数组
时间: 2024-10-21 15:02:01 浏览: 28
在 C 语言中,为了检查 `uint8_t` 数组 `b` 是否完全包含在数组 `a` 中,你可以逐个比较 `a` 中的元素,直到找到 `b` 的所有元素或者遍历完 `a`。下面是一个示例代码:
```c
#include <stdbool.h>
bool has_subarray(uint8_t* a, const uint8_t* b, size_t len_b) {
size_t index_a = 0; // 记录 `a` 中当前元素的索引
for (size_t i = 0; i < sizeof(a) / sizeof(*a); i++) { // 遍历 `a`
if (index_a + len_b > i) break; // 如果 b 的长度超过剩余 a 的部分,说明没找到
bool found_all = true;
for (size_t j = 0; j < len_b; j++) {
if (a[i + j] != b[j]) {
found_all = false;
break;
}
}
if (found_all) {
return true; // 找到了 b 全部元素,提前返回 true
}
index_a++; // 如果 b 的某一个元素未找到,尝试下个元素
}
return false; // 所有元素都未找到
}
int main() {
uint8_t array_a[10] = {0x12, 0x13, 0x14, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
uint8_t array_b[5] = {0x12, 0x13};
if (has_subarray(array_a, array_b, sizeof(array_b) / sizeof(array_b[0]))) {
printf("Array b is a subarray of array a.\n");
} else {
printf("Array b is not a subarray of array a.\n");
}
return 0;
}
```
在这个例子中,我们假设 `a` 和 `b` 都是非动态分配的固定大小数组。如果它们的大小可能会改变,你应该用其他方法来管理它们的界限。
阅读全文