问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在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;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
蚂蚁泡酒适合哪些人喝 蚂蚁酒的功效与禁忌蚂蚁酒的功效与作用 热血无赖卡怎么办 了解这两方面内容 益生菌孕妇 孕妇能喝益生菌吗 羽毛球双打底线是内线还是外线 为什么泰国两位尊者有不死之身 秦始皇活了多少岁?当了几年皇帝? DELL电脑D630.PP18L2手机。才用了4个多月。多少钱我可以买呢,麻烦谁说... dellpp18l现在买多少钱 关于fgo妖兰和摩根的抉择? c程序编译bin 从《女王》到《王冠》,为何英国王室题材影视剧魅力不减? 怎么用c语言对.bin的文件中的内容copy到一个.txt文件中 fgo摩根怎么死的 C语言中读取BIN文件,最终显示ffe8的原因是什么? 小时看过一部讲魔法师梅林的影视,一开始是*的女巫女王看中一个天赋神异的孩子,就是梅林,求名字 c语言中bin文件是什么? c语言写bin文件 现有一bin文件tst.bin,请使用C语言,使得该文件所有数据循环右移5位,这个怎么做? 如何将二进制.bin文件用C语言程序读出并用二进制打印才出来 高分悬赏:C语言二进制文件读写问题。必有重谢!!! c语言操作bin文件 如何用C语言写读取BIN文件,再进行高低位交换保存 C语言读取文件,实现键盘输入83行内容从Bin之后拼接其他字符串,需要拼接两次,跪求代码 C语言中怎么读取BIN文件源代码 怎样在windows xp 里把电影按播放次数排列? 好听的女生笔名 最好含雪字有内涵 诗经里的女孩名字有哪些、 小米10青春版屏幕实测:一点都不青春?旗舰屏幕! 第79届奥斯卡金像奖的获奖名单 请教linux下面C语言文件读写方法,二进制文件为ims.bin,内容为FFFFFFFD,如何读到整型变量,即值为为-3 行尸走肉 垃圾女王不用给摩根上贡么 我没用过C语言,请问怎样将.c文件转换成.bin文件,需要什么编译软件吗? 有本小说,主角的母亲是一个岛上的女王。里面有摩根家族,罗斯柴尔德家族,洛克菲勒家族, 有本小说,主角的母亲是一个岛上的女王。里面有摩根家族,罗斯柴尔德家族,洛克菲勒家族,_百度问一问 女王malena morgan and eva lovia 这个视频是哪个电影或电视上 有什么好听的动感歌? 动感流行音乐 现在全世界最流行的动感歌曲是哪几首? 有什么动感的歌好听? 有哪些好听点的动感快歌? 有什么好听的动感的歌? 推荐一些很动感的歌曲 当前动感流行的歌 比较动感的现代流行歌曲 比较动感的歌有哪些 是不是微信账单在号主的手机上就不用认证可以删除? 山东黄金什么时间复牌啊? 斯伯丁64-288和耐克 trifecta篮球哪个好