精华内容
下载资源
问答
  • 单片机接收数据帧帧头帧尾校验数据解析C语言,采用VS2010编译器书写,已经通过验证,单片机里面也十分实用。双向链表方法。
  • 串口帧头帧尾判断.vi

    2020-04-23 16:14:35
    数据帧格式为:帧1、帧2、数据1高、数据1低、数据2高、数据2低、数据3高、数据3低、数据4高、数据4低、帧尾1、帧尾2数据接收类似于堆栈的入栈操作,最新收到的数据始终在数组的第0个元素中,当收到一帧数据后,...
  • 帧尾判断接收不定长数据,传输稳定可靠
  • 通信协议常见的帧头帧尾

    千次阅读 2020-12-15 11:58:05
    以太网帧帧头(协议标识): IPv4 0x0800 IPX 0x8137 ARP 0x0806 Pause Control 0x8808 IPv6 0x86DD 其他通信协议常见的帧头帧尾: 帧: 0x55AA 0xEB90 0x2222 0xAAAA 帧尾: 0x0D 0x0D0A ...

    以太网帧帧头(协议标识):
    IPv4 0x0800
    IPX 0x8137
    ARP 0x0806
    Pause Control 0x8808
    IPv6 0x86DD

    其他通信协议常见的帧头帧尾:
    帧头:
    0x55AA
    0xEB90
    0x2222
    0xAAAA

    帧尾:
    0x0D
    0x0D0A

    展开全文
  • 队列容量等于一数据的大小,每来一个数据就将数据往队列里面加,当完整接收到一数据时此时队列中的全部数据也就是一完整的数据,因此只需要判断队列是否是数据校验,队列是否是数据校验就可以得知当前...
  • 串口有帧头帧尾的解码

    千次阅读 2018-11-13 00:53:20
    串口有帧头帧尾的解码 #include <stdio.h> #include <string.h> #define MAX_SIZE 1024 int bw_getFrame(unsigned char *buf, int len) { int i = 0; ...

    AT指令编解码-有帧头帧尾的编解码

    参考:https://www.cnblogs.com/chucklu/p/6428615.html
    c实现转义:https://www.jianshu.com/p/2221ab0c0dce

    #include <stdio.h>
    #include <string.h>
    
    #define MAX_SIZE 1024
    
    
    int bw_getFrame(unsigned char *buf, int len)
    {
        int     i = 0;    
        int     ret;
        
        unsigned char head[5] = {0x0d, 0x0a, '+', 'r','='};   /*头帧标志符号*/
        unsigned char tail[2] = {0x0d, 0x0a};   /*尾帧标志符号*/
        int           len_head = 5;
        int           len_tail = 2;
        unsigned char *pData   = NULL;
        int           iData    = 0;
        unsigned char *pDataEnd= NULL;
        int           bHasHead = 0;
        unsigned char Payload[MAX_SIZE]= {0};
        int           lenPayload       = 0;
        unsigned char tmp[MAX_SIZE]    = {0};
        int           lentmp           = 0;
        
        
        
        print_dbg("[i, len] = [%d, %d]\n", i, len);
        if(len <= len_head + len_tail){
            memcpy(tmp, buf, len);
            lentmp += len;
            
            /* TODO: read time out */
            unsigned char more[6] = {'=',  0x33, 0x34, 0x35  ,0x0d, 0x0a};
            ret = 6;
            if(ret <= 0){
                return -1;
            }
            memcpy(&tmp[lentmp], more, ret);
            lentmp += ret;
            print_buf(tmp, lentmp);
            bw_getFrame(tmp, lentmp);
            return 0;
        }
       
        while(i < len){
            if(!bHasHead){
                ret = memcmp(head, &buf[i], len_head);
                if(ret == 0){
                    i        += len_head;
                    pData    = &buf[i];
                    iData    = i;
                    bHasHead = 1;
                    continue;
                }else{
                    
                    goto next;
                }
            }else{
                ret = memcmp(tail, &buf[i], len_tail);
                if(ret == 0){
                    pDataEnd = &buf[i];
                    /* complete a frame */
                    //print_dbg("[i] = [%d]\n", i);
                    print_buf(pData, (pDataEnd-pData));
                    i        += len_tail;
                    if(i+1 < len){
                        print_dbg("has more\n");
                        /* reset var*/
                        bw_getFrame(&buf[i], len-i);
                        return 0;
                    }
                }else{
                    Payload[lenPayload++] = buf[i];
                    goto next;
                }
            }
    next:
            i++;
        }
        
        
        return 0;
    }
    
    int main()
    {      
        /*输入一个带头帧和尾帧的字符串*/
        //char str[MAX_SIZE];
        //printf("Please input str");
        //scanf("%s",str);
        unsigned char buf[100] =  {0x0d, 0x0a, '+', 'r'};
        unsigned char buf0[100] = {0x0d, 0x0a, '+', 'r', '='};
        unsigned char buf1[100] = {0x0d, 0x0a, '+', 'r','=',  0x33, 0x34, 0x35  ,0x0d, 0x0a};
        unsigned char buf2[100] = {0x0d, 0x0a, '+', 'r','=',  0x33, 0x34, 0x35  ,0x0d, 0x0a, 0x0d, 0x0a, '+', 'r','=',  0x77, 0x77,0x77  ,0x0d, 0x0a};
        unsigned char buf3[100] = {0x0d, 0x0a, '+', 'r','=',  0x33, 0x34, 0x35  ,0x0d, 0x0a, 
                                   0x0d, 0x0a, '+', 'r','=',  0x77, 0x77, 0x77  ,0x0d, 0x0a,   
                                   0x0d, 0x0a, '+', 'r','=',  0x00, 0x00, 0x00  ,0x0d, 0x0a,   
                                   0x0d, 0x0a, '+', 'r','=',  0x88, 0x88, 0x88  ,0x0d, 0x0a};
        
        
    
    //     bw_getFrame(buf, 4);
        bw_getFrame(buf0, 5);
    //     bw_getFrame(buf3, 20);
        //bw_getFrame(buf2, 20);
        return 0;
    }
    
    
    
    展开全文
  • 以下是解决问题的代码,并且有了详细注释,希望对你有所帮助。 欢迎在评论区一起讨论 ... 4 char *find(char *str,char *flag) //此函数形参分别接受被寻找字符串的首地址和帧帧尾字符串首地址 ...

    以下是解决问题的代码,并且有了详细注释,希望对你有所帮助。
    欢迎在评论区一起讨论

    
      1 #include<stdio.h>
      2 #include<string.h>
      3 #include<stdlib.h>
      4 char *find(char *str,char *flag) //此函数形参分别接受被寻找字符串的首地址和帧头或帧尾字符串首地址
      5 {
      6     int s = strlen(str);//得出被寻找字符串的总长度
      7     int h = strlen(flag);//得出帧头或帧尾字符串的长度
      8     int i;
      9     for(i = 0; i < strlen(str); i++)//这里可以稍微优化一下'i < strlen(str) - strlen(flag) + 1'不过无伤大雅。。。
     10     {
     11         if(strncmp(str + i,flag,strlen(flag)) == 0)//调用了strncmp函数,其中后两个实参传入的是帧头或帧尾首地址和其长度,至于'str+i'就是寻找功能了,str是字符串首地址,每次加一直到找到相同字符串(结合strncmp函数的作用)
     12         {
     13             return str + i;//返回值就是帧在字符串中的地址
     14         }
     15     }
     16 }
     17 int main()
     18 {
     19     char *str;//字符串
     20     str = (char *)malloc(sizeof(char) * 128);//申请了128字节空间,malloc返回了空间首地址,并被str接收了,下同;
     21     char *head;//帧头
     22     head = (char *)malloc(sizeof(char) * 8);
     23     char *tail;//帧尾
     24     tail = (char *)malloc(sizeof(char) * 8);
     25     printf("请输入一串字符串(最大128位),帧头(最大8位),帧尾(最大8位)\n");
     26     scanf("%s%s%s",str,head,tail);
     27     char *h = find(str,head);//先找帧头
     28     if(NULL == h)//如果没找可以提示用户,下同
     29     {
     30         printf("没有找到帧头!\n");
     31     }
     32     char *t = find(str,tail);//再找帧尾
     33     if(NULL == t)
     34     {
     35         printf("没有找到帧尾!\n");
     36     }
     37 //  *(t + strlen(tail)) = '\0';//如果要将帧头和帧尾以及其中的字符串都输出要这么写,自然下面一行的代码就需要被删除或注释掉
     38     *t = '\0';//如果只要两帧之间的字符串,只需将帧尾首地址所指字符赋值为‘\0’即可
     39     printf("找到的字符串如下:\n");
     40     printf("%s\n",h + strlen(head));//这里没有包含帧头,如果要包含就需要将‘strlen(head)’去掉
     41 }
    
    
    展开全文
  • stm32 实现串口通信,可以直接运行,适合初学者,带有帧头帧尾的读取。
  • 在下位机通讯中,经常使用带帧头帧尾的协议。此时需要将采集上来的数据进行识别处理。 代码示例 string factMessage = &amp;quot;Extension methods have all the capabilities of regular static methods.&...

    描述

    在下位机通讯中,经常使用带帧头帧尾的协议。此时需要将采集上来的数据进行识别处理。

    代码示例

    string factMessage = "Extension methods have all the capabilities of regular static methods.";
    
    // Write the string and include the quotation marks.
    Console.WriteLine($"\"{factMessage}\"");
    
    // This search returns the substring between two strings, so 
    // the first index is moved to the character just after the first string.
    int first = factMessage.IndexOf("methods") + "methods".Length;
    int last = factMessage.LastIndexOf("methods");
    string str2 = factMessage.Substring(first, last - first);
    Console.WriteLine($"Substring between \"methods\" and \"methods\": '{str2}'");
    

    运行结果

    "Extension methods have all the capabilities of regular static methods."
    Substring between "methods" and "methods": ' have all the capabilities of regular static '
    
    展开全文
  • 头帧尾代码

    2020-06-15 15:13:44
    #include #include char head_tail(char str,char result){ int i = 0;... printf(“头帧:head\n”); printf(“尾帧:tail\n”); head_tail(str,result); printf(“取出的中间字符串=%s\n”,result); return 0; }
  • 之前想找串口分析的程序一直不知道怎么实现的,现在自己折腾出来分享大家,串口屏也花了好几天看资料,给刚开始使用的方便。里面 还有ADC转换在线写入串口屏数据以及掉电存储功能以及stm32内外时钟切换配置注释,...
  • 帧尾问题

    千次阅读 2016-11-17 22:07:53
    char *head_count(char *str, char *head)//找出帧头前面的字符串 { char *temp; int size_head = strlen(head); int count1 = 0; int head_flag = 0; if(str == NULL || head == NUL
  • 现在我想在每960bytes数据前帧,比如4个字节的AA : AA AA AA AA,然后再帧尾也加4个字节的AA. 那么数据帧结构就是 AA AA AA AA .......(160bytes data).......AA AA AA AA 请问大家怎么实现啊?
  • 串口通信, 1.帧头帧尾校验和是自己定的么?这算是一个协议么? 2.我看到有的协议有帧没有帧尾但是有...4.帧帧尾都必须有吗还是帧必须有帧尾不必须有? 作为小白,网上查着查着就乱了,求大神解释上面问题
  • 我用串口调试助手发送ASCII码数据,报文格式是 STX 0 F ETX L这些控制字符帧头帧尾STX,ETX应该怎么输入?
  • 头帧尾

    千次阅读 2018-05-31 12:55:59
    printf("头帧:head\n"); //输出部分的头帧 printf("尾帧:tail\n"); //输出部分的尾帧 head_tail(str,result); //调用子函数 printf("取出的中间字符串 = %s\n",result);//取字符   return 0;...
  • 1. 输入一个字符串,同时输入帧帧尾(可以是多个字符),将该字符串中合法的帧识别出来. 提示:帧帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧 #include #include ...
  • 输入一个字符串,同时输入帧帧尾(可以是多个字符),将该字符串中合法的帧识别出来. 提示:帧帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧 #include <stdio.h> #...
  • 去除头帧尾帧的字符串

    千次阅读 2016-11-13 17:01:41
    昨天无聊的时候写了一个带头尾帧的字符串,然后输出时,去除头帧尾帧,我想这不是分分钟的事哦,但是粗心的我忘记了限定的条件,所以写出来铭记自己,时刻须谨慎! 一:头帧尾帧的长度限定,即规定的头尾...
  • 输入一个字符串,同时输入帧帧尾(可以是多个字符),将该字符串中合法的帧识别出来。比如:帧帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧。#include&lt;stdio.h&...
  • 输入一个字符串,同时输入帧帧尾(可以是多个字符),将该字符串中合法的帧识别出来. 提示:帧帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧 这个代码有很多bug,等我理...
  • 【TCP/IP】MAC帧头、IP、TCP和UDP

    千次阅读 2019-07-14 19:54:37
    其中,帧帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如ip数据包。 目前,有四种不同格式的以太网帧在使用,它们分别是: Ethernet II即DIX ...
  • 输入一个字符串,同时输入帧帧尾(可以是多个字符),将该字符串中合法的帧识别出来. 提示:帧帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧 #include ...
  • /*题目: 输入一个字符串,同时输入帧帧尾(可以是多个字符),将该字符串中合法的帧识别出来.提示:帧帧尾分别是head和tail 字串”asdheadhauboisoktail”中headhauboisoktail是合法帧*/ #include #include int...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,541
精华内容 9,016
关键字:

帧头帧尾