小结参数配置的若干方式,SD卡放置config.txt的解析

图中结论:换行 0x0D,0X0A,     TAB 0x09,空格 0x20

1写各种信息到M1卡,用户卡-管理员卡-配置卡,刷卡单片机读走数据,完成参数修改。---需要上位机配合写卡。

2屏幕UI,按键或者触屏修改。---比刷卡更可视化。

3蓝牙通讯,app发送数据。---需要开发移动app。

4放置指定名字的.txt,程序去读文件,比如树莓派那个我就是这么玩的。

后期任务;SD卡API升级

+++++++++++++++20180612更新 执行方案4+++++++++++++

+++++++++++++++++++++++课前准备+++++++++++++++++

知识点1:如下代码错误

  1 #include<stdio.h>
  2 #include<string.h>
  3 
  4 int main()
  5 {
  6 char *A1="hello";
  7 char *B1;
  8 strncpy(B1,A1+1,2);
  9 printf("%s\n",B1);
 10 
 11 
 12 }

简单说就是strncpy strcpy 这样的函数它的B1和这个位置需要内存,可写的内存,所以必须是数组不能是string

其实在win下面编程char *A1="hello";已经直接报警了必须写成const char *A1="hello";就是我说的这个知识

 

知识点2:用数组,试试strncpy自己装自己!

 1 #include<stdio.h>
  2 #include<string.h>
  3 
  4 int main()
  5 {
  6 char A1[10]="hello";
  7 strncpy(A1,A1+1,2);
  8 printf("%s\n",A1);
  9 
 10 
 11 }
~      

可以!上面的结果是elllo

hello

  el

elllo

明白了吧!它自己的还是残留在数组中的!

 

+++++++++++++++++++++++开始试验+++++++++++++++++

SD卡准备文件

 

显示如图。

开始分析!

等一下 我们修改一下

加入空格!

好了 一些特殊也考虑到了 设计程序吧!

char len1,len2,len3;
	char *A1,*A2,*A3;
	char B1[10],B2[10],B3[10];
u32 A,B,C;
void Count_explan(char *cfgtxt)
{
//	char *A1,*A2,*A3;
//	char B1[5],B2[5],B3[3];
  A1=strstr(cfgtxt,"Keycount=");
  if(!A1)return;
	A2=strstr(A1,"Cardcount=");
	if(!A2)return;
	A3=strstr(A2,"Cardfrz=");
	if(!A3)return;
	
printf("A1:%s\n",A1);	
printf("A2:%s\n",A1);	
printf("A3:%s\n",A1);	
len1=strlen(A1);
len2=strlen(A2);
len3=strlen(A3);

	strncpy(B1,A1+strlen("Keycount="), strlen(A1)-strlen(A2)-strlen("Keycount=") -strlen("\r\n"));
	strncpy(B2,A2+strlen("Cardcount="),strlen(A2)-strlen(A3)-strlen("Cardcount=")-strlen("\r\n"));
	strncpy(B3,A3+strlen("Cardfrz="),strlen(A3));
	
	

	}

此时效果:

后面就是再次过滤数据。

《上面主要是用strncpy来截取子串!!!》

void Count_explan(char *cfgtxt)
{
	char *A1,*A2,*A3;
	char B1[10],B2[10],B3[10];
  A1=strstr(cfgtxt,"Keycount=");
  if(!A1)return;
	A2=strstr(A1,"Cardcount=");
	if(!A2)return;
	A3=strstr(A2,"Cardfrz=");
	if(!A3)return;

	strncpy(B1,A1+strlen("Keycount="), strlen(A1)-strlen(A2)-strlen("Keycount=") -strlen("\r\n"));
	strncpy(B2,A2+strlen("Cardcount="),strlen(A2)-strlen(A3)-strlen("Cardcount=")-strlen("\r\n"));
	strncpy(B3,A3+strlen("Cardfrz="),strlen(A3));
	
	stringfilter(B1);
	stringfilter(B2);
	stringfilter(B3);
		
	Set_K_Count(atoii(B1));
	Set_C_Count(atoii(B2));
	Set_C_Fre (atoii(B3));
}
上面的思路就是:拿到需要的数据段,去除里面的空格等,转化数据。

下面想了一个高级点的办法,

--去除里面的空格等,转化数据--这两部貌似没有什么优化,主要是前面

用strncpy去拿比较麻烦,能不能高级点?可以用 0 是字符串结束!!!平时是一个陷阱,现在我们倒过来用

我们用0去强行结束字符串!!

/*如果遇到/r/n换行 就结束这个字符*/
void stringfilter2(char *s)
{
  u8 i=0;
	for(i=0;i<strlen(s);i++)
		if(s[i]=='\r')
		{
			s[i]=0;
			break;
		}
}
/*如果遇到空格 TAB 等就替换成‘0’*/
void stringfilter(char *s)
{
  u8 i=0;
	for(i=0;i<strlen(s);i++)
		if(s[i]>'9'||s[i]<'0')
			s[i]='0';
}
void Count_explan(char *cfgtxt)
{
	char *A1,*A2,*A3;
	char B1[10],B2[10],B3[10];
  A1=strstr(cfgtxt,"Keycount=");
  if(!A1)return;
	A2=strstr(A1,"Cardcount=");
	if(!A2)return;
	A3=strstr(A2,"Cardfrz=");
	if(!A3)return;
	printf("bf:%s\n",A1);
	stringfilter2(A1);
	printf("df:%s\n",A1);
	stringfilter(A1);
	stringfilter2(A2);
	stringfilter(A2);
	stringfilter2(A3);
	stringfilter(A3);
	

		
	Set_K_Count(atoii(A1));
	Set_C_Count(atoii(A2));
	Set_C_Fre (atoii(A3));
}	

 

 

看到了吧 果然愉快的结束了!!

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值