我有一个模式
我有字节流,我需要查找字节流中出现的字节数。模式可以在任何位位置找到。
答案 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