匹配二进制流中的字符串
来源:互联网 发布:博世华域武汉待遇知乎 编辑:程序博客网 时间:2024/06/05 15:36
代码来自VikingCAT的Segmar模块
C版本
#define MAX_BLKSZ 262144 // 256k#define MAGIC_TAG "METAM3U8"#define MAGIC_TAG_LEN 8struct header {uint8_t version;uint8_t cmd; char guid[48]; char data[];};static int match_tag(int fd, size_t leftsz, size_t *readsz) { const char *key = MAGIC_TAG; char buf[MAGIC_TAG_LEN] = { 0 }; int mov, la, lb; mov = la =lb = MAGIC_TAG_LEN; size_t count = 0; int find = 0; while (count < leftsz) { int len = MAGIC_TAG_LEN - mov; if (len > 0) memcpy(buf, buf + mov, len); int sz = read(fd, buf + len, mov); count += sz; if (sz < mov) break; int i; for (i = MAGIC_TAG_LEN - 1; i > -1; --i) { if (key[i] != buf[i]) break; } if (i == -1) { find = 1; break; } char c = buf[i]; int k; for (k = 0; k < i; ++k) { if (key[k] == c) break; } if (k == i) k = -1; mov = i - k; } *readsz = count; return find;}
再来个python版本的
############################################################################_max_blksz = 256 * 1024 # 256K_magic_tag = 'METAM3U8'############################################################################def match(fd, key, fsize) : a = key la = len(key) lb = la mov = la count = mov d = '' found = False while count <= fsize : r = fd.read(mov) d = d[mov : ] + r if len(d) < la : break bi = -1 for i in range(la - 1, -1, -1) : if a[i] != d[i] : bi = i break if bi == -1 : found = True break c = d[bi] ai = a[0 : bi].find(c) mov = bi - ai count += mov if found : return True, count - la, count else : return False, 0, 0
阅读全文
0 0
- 匹配二进制流中的字符串
- java--二进制字符串匹配的问题
- sunday 字符串匹配算法的实现(支持二进制匹配)
- MySQL中的字符串模式匹配
- MySQL中的字符串模式匹配
- 字符串匹配中的图论
- MySQL中的字符串模式匹配
- 字符串匹配中的KMP算法
- 正则匹配字符串中的电话号码
- 仿写类似strstr()字符串匹配的二进制匹配方法FindBinaray()
- sql中的字符串匹配、函数大全
- PHP正则匹配字符串中的中文
- 【Java编程】Java中的字符串匹配
- 判断字符串中的括号是否匹配
- php 匹配字符串中的连续数字
- java获取两个字符串中的最大匹配
- 华为code中的字符串通配符匹配
- 判断字符串中的括号是否匹配
- 分享几个前端干货,面试经常提
- 设计模式(十一)桥接模式
- 将 Oracle JDBC 驱动发布到Nexus上
- git恢复未上传到仓库的已经被删除的本地文件
- OpenJudge 2.2-1750 全排列
- 匹配二进制流中的字符串
- python常见的两种装饰器
- Spring Boot整合Dubbo运行
- 快速认识Java内存区域划分
- java后台自定义错误页面
- 基础学习笔记之opencv(23):OpenCV坐标体系的初步认识
- Android退出应用最优雅的方式
- js中一些常见的小坑
- Android笔记:日期常用工具类(DateUtils)