我试图编写一个函数,它只使用基于指针的逻辑来搜索内存区域(baseAddr)中的某个字节(byte),统计出现的次数,并将偏移量存储在一个数组(offset)中。以下是我目前掌握的情况:
uint8_t findBytes( uint16_t* const Offsets, const uint8_t* const baseAddr,
uint32_t length, uint8_t Byte) {
uint8_t bytesRead = 0;
int count = 0;
while (bytesRead < length) {
if ((baseAddr + bytesRead) == Byte) {
*(Offsets + count) = bytesRead;
count++;
}
bytesRead++;
}
return count;
}
不管出于什么原因,如果我使用(bytesRead
最佳答案
bytesRead
是uint8_t
,其最大值为255。如果有uint32_t length
,则偏移量应为相同的数据类型。由于每个字节都可能是匹配的,所以您的计数(返回值)也需要与offset数组的类型相同。
更多问题:
if ((baseAddr + bytesRead) == Byte)
这里没有取消引用指针,只检查其值。编译器应该在此处发出类型不匹配的警告。
尝试:
if (*(baseAddr + bytesRead) == Byte)
最后,您需要确保
offsets
指向足够的内存。同样,每个字节都可能匹配,这意味着offsets
的长度(在元素中)应该与输入数据的长度相同。