读取文件,判断是否含有固定字符串
来源:互联网 发布:中船重工 知乎 编辑:程序博客网 时间:2024/06/05 05:57
项目中,需要通过文件设备,A设备升级文件为a.bin,B设备升级文件为b.bin,不同的设备对应的升级文件是不同的。
设备升级时对文件的校验很是重要,单纯的从文件名称校验,是很不安全的,因为可以将任何文件修改成所需文件名称。
这里可以认为是“挂羊头卖狗肉”。
通常,升级文件中的某些关键字符串,比如a.bin中有的字符串为“helloword”。
那么文件检验的问题,就转换为在a.bin文件中查找字符串“helloword”,找到则说明确实是A设备所需的升级包,反之则不是。
下面搜索度娘、谷歌,“字符串匹配”等字样,你会找到一大堆的资料。你会惊讶的发现,好像很难符合,可能本人没找对方法。
打开二进制文件,你会发现一大堆的乱码,然后你会惊喜的看到关键字符串是“FFF黟 F? h e l l o w o r d L%N嚆h”
关键字不是连续的,而是有空格的。
这里采用一种方法,“拼关键字符串”,既然可以通过其他工具打开文件,那么可以在源文件中找到关键字符串对应的长度L,
然后找到第一个字符对应的位置,向后取L个字符,拼起来就是了(自己动手丰衣足食)。
bool CDfuSeDemoDlg::checkFile(CString file)
{
bool ckret = false;
//读模式构造函数,在自身目录下建立文件,不存在就创建,创建时不修改原有内容
CFile file(file, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeRead);
//待写容器
CString strPath;
//暂存字符数组
char* ptchBuffer = NULL;
//统计字的个数
int nCount = file.GetLength();
//+1来用于最后的终止符
ptchBuffer = new char[CHECK_DFU_LEN];
ptchBuffer[CHECK_DFU_LEN] = '\0';
//读入
file.Read(ptchBuffer, CHECK_DFU_LEN);
file.Close();
for (int i = 0; i < CHECK_DFU_LEN - 10; i++)
{
CString str = "";
if (ptchBuffer[i] == 'h')
{
for (int j = i; j <= i + 16; j += 2)
{
str += ptchBuffer[j];
}
if (str == "helloword")
{
ckret = true;
}
}
}
return ckret;
}
废话比较多,说来惭愧,想了一天才想到的,所有多啰嗦啰嗦
- 读取文件,判断是否含有固定字符串
- JS判断字符串是否含有中文
- 判断一个字符串中是否含有汉字
- 判断字符串中是否含有汉字
- flex 判断字符串中是否含有空格
- php判断字符串是否含有中文字符
- PHP中判断字符串是否含有中文
- java 判断字符串中是否含有字母
- VBA判断字符串中是否含有汉字
- 判断字符串中是否含有中文
- 如何判断一个字符串是否含有中文
- 判断字符串中是否含有某个字符
- java 判断字符串内是否含有中文
- PHP中判断字符串是否含有中文
- 需要判断字符串中是否含有双引号
- QT判断是否含有某字符串
- 判断字符串中是否含有BOM
- java字符串判断是否含有单引号
- 帧同步 相关
- 纳税服务系统【信息发布管理、Ueditor、异步信息交互】
- jvm中的新生代Eden和survivor区
- BZOJ 2405 数字
- hibernate懒加载导致多表联合查询失败
- 读取文件,判断是否含有固定字符串
- ConcurrentHashMap
- Android 判断网络状态
- 一维的Haar小波变换
- [机器学习]week4编程作业:Multi-class Classification and Neural Networks
- 蛇形填数
- oracle杀回话不释放的问题
- 计算机网络原理知识点(第四章:网络层)
- 太复杂了么,秒懂jdbc的用法