码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用CAPL 内置函数 memcpy 和memcmp 处理数组的若干问题


    • 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
    • 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
    • 🍅 玩转CANoe,博客目录大全,点击跳转👉

    目录

    • 📙 问题1:怎么将byte A[5]={0x01,0x02,0x03,0x04,0x05}赋值byte B[5]?
    • 📙 问题2:怎么把 byte A[5]={49,50,51,52,53} 赋值给 char B[10]?
    • 📙 问题3:和问题2 时互操作,将 char A[10]="12345"转为 byte B[10]
    • 📙 问题4:字符串赋值操作,将 char A[10]="12345"赋值给 char B[10]
    • 📙 问题5:怎么比较是否相等两个数组byte A[5]和byte B[5] 是否相等呢
    • 📙 问题6:两个char [] 数组(字符串)比较可以用 strncmp函数
    • 📙 总结


    📙 问题1:怎么将byte A[5]={0x01,0x02,0x03,0x04,0x05}赋值byte B[5]?

    一般做法,就是循环赋值,如下:

    On key 'b' 
    {
      long i;
      byte A[5]={0x01,0x02,0x03,0x04,0x05};
      byte B[5];
       //怎么将A数组赋值给B数组? 
       for(i=0;i< elCount(A);i++)
      {
        B[i] = A[i];
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 内置memcpy函数做法:
    • void memcpy( byte dest[], byte source[], dword length); // form 8
    On key 'h' 
    {
      byte A[5]={0x01,0x02,0x03,0x04,0x05};
      byte B[5];
      memcpy(B,A,elCount(A));  
      write("**0x%x,0x%x,0x%x,0x%x,0x%x",B[0],B[1],B[2],B[3],B[4]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    📙 问题2:怎么把 byte A[5]={49,50,51,52,53} 赋值给 char B[10]?

    这在我们诊断读取软件版本等信息时,常常需要转换

    • 一般做法,就是循环赋值,如下:
    On key 'j' 
    {
      long i;
      byte A[5]={49,50,51,52,53};
      char B[10];
      
      for(i=0;i< elCount(A);i++)
      {
        B[i] = A[i];
      } 
      write("**%s",B);
    }
    //输出:**12345
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 内置memcpy函数做法:
    • void memcpy( char dest[], byte source[], dword length); // form 9
    On key 'k' 
    {
      long i;
      byte A[5]={49,50,51,52,53};
      char B[10];
      memcpy(B,A,elCount(A));
      
      write("**%s",B);
    }
    //输出:**12345
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    📙 问题3:和问题2 时互操作,将 char A[10]="12345"转为 byte B[10]

    • 内置memcpy函数做法:
    • void memcpy( byte dest[], char source[], dword length); // form 10
    On key 'l' 
    {
      char A[10]="12345";
      byte B[10];
      memcpy(B,A,strlen(A));
      
      write("**%d,%d,%d,%d,%d",B[0],B[1],B[2],B[3],B[4]);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    📙 问题4:字符串赋值操作,将 char A[10]="12345"赋值给 char B[10]

    典型的字符串赋值问题,这就有很多中函数或者方法可用了,这里也可以用内置memcpy函数

    • void memcpy( byte dest[], char source[], dword length); // form 10
    On key 'm' 
    {
      char A[10]="12345";
      char B[10];
      memcpy(B,A,strlen(A)); //方法1:
      //strncpy (B,A,elcount(A)); //方法2:
      //snprintf(B, elcount(B), "%s",A);//方法3 
       write("**%s",B);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    📙 问题5:怎么比较是否相等两个数组byte A[5]和byte B[5] 是否相等呢

    • 一般做法,可能就是在for循环中一一对比,现在可以用memcmp 方法
    • int memcmp(byte buffer1[], byte buffer2[], dword size); // form 4
    • 返回值为 0,则两者相等
    On key 'n' 
    {
      long Result;
      byte A[5]={0x01,0x02,0x03,0x04,0x05};
      byte B[5]={0x01,0x02,0x03,0x04,0x06};
      Result = memcmp(A, B ,elCount(A));
      write("byte A[5] and byte B[5] equal? %d",Result);
    }
    // 结果:byte A[5] and byte B[5] equal? -1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    📙 问题6:两个char [] 数组(字符串)比较可以用 strncmp函数

    • long strncmp(char s1[], char s2[], long len);
    • 返回值为 0,则两者相等
    On key 'v' 
    {
      char s1[7] = "Vector";
      char s2[7] = "Vector";
        
      if(strncmp(s1,s2,strlen(s1)))
        write("not equal");
      else
        write("equal");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    📙 总结

    上面根据6个问题,介绍了最常用的一些赋值/比较的用法,更深一层的用法可以参考下Help文档。

    memcpy 和memcmp 函数 根据参数不同重载了很多,不管是byte 数组,还是char 字符串,还是struct 结构体,都是在内存中占用连续内存的,都可以使用memcpy相互赋值。

    在这里插入图片描述

    在这里插入图片描述

    23

    7

    • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

    • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
      18
  • 相关阅读:
    回溯算法 | 分割字符串 | 复原IP地址 | leecode刷题笔记
    leetcode-518. 零钱兑换 II
    Zabbix技术分享——使用Zabbix监控系统日志文件大小
    Oracle数据库安装,在自己的windows电脑上面。
    在 Vue3 中使用 mitt 进行组件通信
    springboot(13):spring 过滤器和拦截器的区别
    本周 AI 新闻报道:多个大厂发布了重大更新
    【Python】10 自动选课
    java计算机毕业设计上虞烟草物流配送系统源码+系统+数据库+lw文档+mybatis+运行部署
    WebAssembly之MuPDF的编译
  • 原文地址:https://blog.csdn.net/qq_34414530/article/details/127987890
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号