我试图编写一个函数,它只使用基于指针的逻辑来搜索内存区域(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

最佳答案

bytesReaduint8_t,其最大值为255。如果有uint32_t length,则偏移量应为相同的数据类型。由于每个字节都可能是匹配的,所以您的计数(返回值)也需要与offset数组的类型相同。
更多问题:

if ((baseAddr + bytesRead) == Byte)

这里没有取消引用指针,只检查其值。编译器应该在此处发出类型不匹配的警告。
尝试:
if (*(baseAddr + bytesRead) == Byte)

最后,您需要确保offsets指向足够的内存。同样,每个字节都可能匹配,这意味着offsets的长度(在元素中)应该与输入数据的长度相同。

10-07 21:54