• 全部
  • 问答

C语言解析二进制文件,去掉标签位,读取标签后两位数值,写出文件

我是宁野野 2020-12-15 02:07:01


需要去掉标签(AA AA 04 80 02),保留标签后两位数据,大佬们有什么思路吗? 求代码
...全文
116 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是宁野野 2020-12-17
引用 6 楼 ctrigger的回复:
[quote=引用 5 楼 赵4老师 的回复:]给钱就有。

哈哈,这个没必要吧。
不怕麻烦,自己慢慢折腾解包就行。
实在不行,可以参考TCP/IP解包源码。[/quote] 可以帮忙写下代码吗?有偿
回复
ctrigger 2020-12-16
引用 5 楼 赵4老师 的回复:
给钱就有。

哈哈,这个没必要吧。
不怕麻烦,自己慢慢折腾解包就行。
实在不行,可以参考TCP/IP解包源码。
回复
赵4老师 2020-12-16
给钱就有。
回复
ctrigger 2020-12-15
引用 3 楼 我是宁野野 的回复:
通讯协议应该是这样的:头+数据长度+数据正文+校验
例如:AA 44 05 01 02 03 04 05 EA
这里我假设的一条数据,协议如下:
数据头:AA 44
数据长度: 05
数据正文: 01 02 03 04 05
校验:EA
现在我有一个这样的txt文件,想把里面的数据正文解析出来,请问有代码 吗?


根据协议格式,定义一个结构体,对号入座,接下来就是memcpy了。
回复
我是宁野野 2020-12-15

通讯协议应该是这样的:头+数据长度+数据正文+校验
例如:AA 44 05 01 02 03 04 05 EA
这里我假设的一条数据,协议如下:
数据头:AA 44
数据长度: 05
数据正文: 01 02 03 04 05
校验:EA
现在我有一个这样的txt文件,想把里面的数据正文解析出来,请问有代码 吗?
回复
赵4老师 2020-12-15
#include <stdio.h>
#include <string.h>
int main() {
    unsigned char s[24]={
        0xAA,0xAA,0x04,0x80,0x02,0x12,0x34,0x99,
        0xAA,0xAA,0x04,0x80,0x02,0x56,0x78,0x99,
        0xAA,0xAA,0x04,0x80,0x02,0x12,0x34,0x99,
    };
    unsigned char m[5]={0xAA,0xAA,0x04,0x80,0x02};
    unsigned char d[6];
    unsigned char *ps,*pd;

    ps=s;
    pd=d;
    while (1) {
        if (0==memcmp(ps,m,5)) {
            pd[0]=ps[5];
            pd[1]=ps[6];
            ps+=8;
            pd+=2;
            if (ps-s>=24 || pd-d>=6) break;
        } else break;
    }
    for (int i=0;i<6;i++) printf("0x%02X ",d[i]);
    return 0;
}
//0x12 0x34 0x56 0x78 0x12 0x34
回复
ctrigger 2020-12-15
真懒。这都是固定模式,按照协议直接对号入座就行。。
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2020-12-15 02:07
社区公告
暂无公告