如何在bin文件中查找连续的6个字节数据并替换它,要求:用C语言实现。文件打开路径:/etc_ro/wlan/l.bin
发布网友
发布时间:2022-05-01 20:41
我来回答
共1个回答
热心网友
时间:2023-10-25 04:56
#include<stdio.h>
#include<string.h>
// 移动字符
void indentation(char* acStr, int iSize, int iNum)
{
int i;
if(iNum >= 0)
for(i=0; i<iSize; i++)
acStr[i] = acStr[i + iNum];
else
for(i=iSize; i>=0; i--)
acStr[i] = acStr[i + iNum];
}
int main(void)
{
char acFileName[128];
char acBuf[1024];
int iByteNum, iSame, i, j;
FILE* pFile;
// 被替换掉的连续字符
char acByteA[] = {'d', '4', 'e', 'q', 'h', 'r'};
int iNumA = 6;
// 需要替换的连续字符
char acByteB[] = {'f', 'e', 'r', 'j'};
int iNumB = 4;
fileName:
printf("%s\n", "请输入文件名,例如:/etc_ro/wlan/l.bin");
scanf("%s", acFileName);
if((pFile = fopen(acFileName, "rb"))==NULL)
{
printf("%s\n", "读取文件失败,请重新输入文件名。");
goto fileName;
}
fseek(pFile, 0, SEEK_END);
iByteNum = ftell(pFile);
rewind(pFile);
// 读取数据
fread(acBuf, 1, iByteNum, pFile);
fclose(pFile);
for(i=0; i<iByteNum; i++)
{
if(acBuf[i] == acByteA[0])
{
// 查找连续的字符
iSame = 0;
for(j=0; j<iNumA; j++)
if(acBuf[i + j] == acByteA[j])
iSame ++;
// 如果找到就替换
if(iSame == iNumA)
{
// 根据字符个数差异移动后面的字符
indentation(&acBuf[i + iNumB], iByteNum - i - iNumB, iNumA - iNumB);
// 字符替换
for(j=0; j<iNumB; j++)
acBuf[i + j] = acByteB[j];
iByteNum += iNumB - iNumA;
i += iNumB - 1;
}
}
}
iByteNum --;
//for(i=0; i<iByteNum; i++)
// printf("%c", acBuf[i]);
// 写入文件
pFile = fopen(acFileName, "wb");
fwrite(acBuf, sizeof(char), iByteNum, pFile);
return 0;
}
热心网友
时间:2023-10-25 04:56
#include<stdio.h>
#include<string.h>
// 移动字符
void indentation(char* acStr, int iSize, int iNum)
{
int i;
if(iNum >= 0)
for(i=0; i<iSize; i++)
acStr[i] = acStr[i + iNum];
else
for(i=iSize; i>=0; i--)
acStr[i] = acStr[i + iNum];
}
int main(void)
{
char acFileName[128];
char acBuf[1024];
int iByteNum, iSame, i, j;
FILE* pFile;
// 被替换掉的连续字符
char acByteA[] = {'d', '4', 'e', 'q', 'h', 'r'};
int iNumA = 6;
// 需要替换的连续字符
char acByteB[] = {'f', 'e', 'r', 'j'};
int iNumB = 4;
fileName:
printf("%s\n", "请输入文件名,例如:/etc_ro/wlan/l.bin");
scanf("%s", acFileName);
if((pFile = fopen(acFileName, "rb"))==NULL)
{
printf("%s\n", "读取文件失败,请重新输入文件名。");
goto fileName;
}
fseek(pFile, 0, SEEK_END);
iByteNum = ftell(pFile);
rewind(pFile);
// 读取数据
fread(acBuf, 1, iByteNum, pFile);
fclose(pFile);
for(i=0; i<iByteNum; i++)
{
if(acBuf[i] == acByteA[0])
{
// 查找连续的字符
iSame = 0;
for(j=0; j<iNumA; j++)
if(acBuf[i + j] == acByteA[j])
iSame ++;
// 如果找到就替换
if(iSame == iNumA)
{
// 根据字符个数差异移动后面的字符
indentation(&acBuf[i + iNumB], iByteNum - i - iNumB, iNumA - iNumB);
// 字符替换
for(j=0; j<iNumB; j++)
acBuf[i + j] = acByteB[j];
iByteNum += iNumB - iNumA;
i += iNumB - 1;
}
}
}
iByteNum --;
//for(i=0; i<iByteNum; i++)
// printf("%c", acBuf[i]);
// 写入文件
pFile = fopen(acFileName, "wb");
fwrite(acBuf, sizeof(char), iByteNum, pFile);
return 0;
}