C:查找内存区域中字节的出现

时间:2018-10-11 12:59:34

标签: c pointers byte

我正在尝试编写一个函数,该函数仅使用基于指针的逻辑来在内存区域(baseAddr)中搜索某个字节(Byte),计算出现的次数,并将偏移量存储在数组中(偏移量)。这是我到目前为止的内容:

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

1 个答案:

答案 0 :(得分:2)

bytesRead是一个uint8_t,最大值为255。如果您有uint32_t length,则偏移量应为相同的数据类型。而且由于可能每个字节都可能是一个匹配项,所以您的计数(返回值)也需要与offsets数组一样为同一类型。

更多问题:

if ((baseAddr + bytesRead) == Byte)

这里没有取消引用指针,只是在检查它的值。您的编译器应在此处针对类型不匹配发出警告。

尝试:

if (*(baseAddr + bytesRead) == Byte)

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