Fork me on GitHub

随笔 - 997  文章 - 5  评论 - 181  阅读 - 300万 

前记

  c语言已经是一门经常吃饭的本领,本来是要有种看一眼,就知道哪儿出问题了才行,没想到,遇到实际问题的时候,才知道自己的修为不到家。还没有达到那种炉火纯青的境界。看来,不是这个世界没有机会,是自己的水平还有待提高啊。看来还是要好好积累吧。把不熟悉的知识点记录下来。做个备忘,免得后面再犯类似的错误。

实际例子:

  其实,这个while循环本来很简单的事情,没想到加在一堆代码中间,居然把我给绕了进去。下面看一下这个代码:

#include <stdio.h>

#define FRAME_LEN_HEAD 4

typedef unsigned char uint8_t;

static int cmd_rx_offset = 0;

void test_cmd(uint8_t *cmd_buffer_begin, int len)
{
    
            int i = 0;
            cmd_rx_offset = len;
    
            do
            {
                if ((*(cmd_buffer_begin + i + 0) == 0x89)
                    && (*(cmd_buffer_begin + i + 1) == 0xAB)
                    && (*(cmd_buffer_begin + i + 2) == 0xCD)
                    && (*(cmd_buffer_begin + i + 3) == 0xEF))
                {
                    printf("find the right cmd break:%d\n",i);
                    break;
                }
    
               // i++;
            }
            while (i++ < (cmd_rx_offset - FRAME_LEN_HEAD));
    
            printf("bb cmd_rx_offset:%d \n",cmd_rx_offset);
            cmd_rx_offset -= i;
            printf("cc cmd_rx_offset:%d \n",cmd_rx_offset);

}

int main()
{
        uint8_t testa[20] = {0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x10,0x11,0x12,0x13,0x14,0x15,0x88,0x88,0xAB,0xCD,0xEF};

        test_cmd(testa,20);

        return 0;
}
     

错误在哪儿?这个函数返回值一直是这样的:
bb cmd_rx_offset:20
cc cmd_rx_offset:3
由于当初把while循环中的++计算错误,导致我的计算一直不对,后来把代码摘出来,反复查看并验证,才知道问题是出在这里了。

posted on   虚生  阅读(668)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2017-12-18 python中stack在实际中的简单应用之平衡符号
2017-12-18 python中两种栈实现方式的性能对比
2017-12-18 python实现stack并测试
点击右上角即可分享
微信分享提示