| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1538 人关注过本帖
标题:C语言解析二进制文件,去掉标签位,读取标签后两位数值,写出文件
只看楼主 加入收藏
宁野野来了
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2020-12-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
C语言解析二进制文件,去掉标签位,读取标签后两位数值,写出文件
AA AA 04 80 02 07 FF 77 AA AA 04 80 02 FD 74 0C...需要去掉标签(AA AA 04 80 02),保留标签后两位数据,大佬们有什么思路吗?
搜索更多相关主题的帖子: 位数 解析 文件 标签 读取 
2020-12-15 13:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:20 
听不懂,是这个意思吗?

程序代码:
#include <stdio.h>

int main( void )
{
    FILE* file = fopen( "d:\\1.txt", "rb" );
    if( file )
    {
        unsigned char buf[6];
        if( fread(buf,1,sizeof(buf),file) == sizeof(buf) )
            printf( "%02hhX %02hhX\n", buf[4], buf[5] );

        fclose( file );
    }
}
收到的鲜花
2020-12-15 14:06
宁野野来了
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2020-12-12
收藏
得分:0 
回复 2楼 rjsp
通讯协议应该是这样的:头+数据长度+数据正文+校验
例如:AA 44 05 01 02 03 04 05&nbsp;EA
这里我假设的一条数据,协议如下:
数据头:AA 44
数据长度: 05
数据正文: 01 02 03 04 05
校验:EA
现在我有一个这样的txt文件,想把里面的数据正文解析出来
2020-12-15 17:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
回复 3楼 宁野野来了
更看不懂了,你在1楼中说标签是 AA AA 04 80 02 共5个字节,怎么在3楼却又说标签是 AA 44 共2个字节?
你在1楼中说是 二进制文件,怎么在3楼却又说是 txt文件?

通讯协议应该是这样的:头+数据长度+数据正文+校验
例如:AA 44 05 01 02 03 04 05&nbsp;EA
这里我假设的一条数据,协议如下:
数据头:AA 44
数据长度: 05
数据正文: 01 02 03 04 05
校验:EA
现在我有一个这样的txt文件,想把里面的数据正文解析出来
假如按照你在三楼说的,那函数有原型就是:
size_t foo( const char* filename, unsigned char buf[static 256] )
先读前三个字节,读失败,或不够3字节,或读出来前两个字节不是 AA 44,那么 return 0;
再读第三字节指定的长度(假设是n)的数据到buf中,如果读失败,或不够n字节,那么 return 0;
再读一字节,……,作校验,……
最后 return n;
2020-12-15 19:48
宁野野来了
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2020-12-12
收藏
得分:0 
text.txt (3.22 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
一个文件,处理后获得类似红笔的这种数据
2020-12-15 21:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
我觉得你首先要把需求描述清楚
a. 你这个文件是什么格式?
   是二进制格式,里面存着 0xAA 0xAA 0x04 0x80 …… 吗?
   是文本格式,里面存着 "AA AA 04 80 ……" 吗?
   如果是文本格式,那文字是什么编码?有无BOM头?换行符是什么?你可以将文件直接发上来
b. 当数据头不是 AA AA 时如何处理?
c. 当校验位不对时如何处理?
d. 为什么4个数据“80 02 07 FF”时只取后两个?那5个数据“01 02 03 04 05”时取哪几个?取数的规则是什么?
e. 你的文件中是不是有多组数据帧,你是不是要将每一帧都提取出来?
2020-12-16 09:36
快速回复:C语言解析二进制文件,去掉标签位,读取标签后两位数值,写出文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037399 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved