使用unsigned char指针

时间:2016-06-01 11:07:10

标签: c

我有一个模式

我有字节流,我需要查找字节流中出现的字节数。模式可以在任何位位置找到。

1 个答案:

答案 0 :(得分:1)

这可以通过一次读取一个字节的文件并将位旋转到测试变量来实现。你可以修改它以从字符串中读取(不愿意给你" pat"代码)。

#include <stdio.h>

size_t count_patt(char *filename, unsigned char pattern)
{
    size_t count = 0;
    int byteA, byteB, bits = 0;
    FILE *fp;
    if((fp = fopen(filename, "rb")) == NULL) {
        return count;
    }
    if((byteA = fgetc(fp)) == EOF) {
        return count;
    }
    while(1) {
        if(byteA == pattern) {
            count++;
        }
        if(bits <= 0) {
            if((byteB = fgetc(fp)) == EOF)          // refresh byte B
                break;
            bits = 8;                               // which has 8 bits
        }
        byteA = (byteA << 1) & 0xFF;                // rotate byte A left
        if((byteB & 0x80) != 0) {
            byteA++;                                // shift in ms bit of byte B
        }
        byteB <<= 1;                                // rotate byte B left
        bits--;                                     // bit tally
    }
    return count;
}

int main()
{
    printf("%zu bytes\n", count_patt("test.txt", 0x31));
}

test.txt的内容(2字节01000010 01100011)

Bc

节目输出

1 bytes