使用CAPL 内置函数 memcpy 和memcmp 处理数组的若干问题

news/2024/11/25 0:33:26/
  • 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对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];}
}
  • 内置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]);
}

📙 问题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
  • 内置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

📙 问题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]);
}

📙 问题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);
}

📙 问题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

📙 问题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");elsewrite("equal");
}

📙 总结

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

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

在这里插入图片描述

在这里插入图片描述

23

7

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

  • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
    18

http://www.ppmy.cn/news/877724.html

相关文章

c语言定义浮点变量i和j,2012年计算机等级考试二级C语言基础教程:数据类型、变量和运算符...

2012年计算机等级考试二级C语言基础教程:数据类型、变量和运算符 分类:计算机等级 | 更新时间:2016-07-08| 来源:转载 本节首先介绍Turbo C程序的基本组成部分; 然后介绍Turbo C的数据类型、变量类型、变量的初始化和赋值; 最后介绍Turbo C的有关操作。通过本节的学习, 可以…

LWIP的RAW API UDP通信详解(stm32f103---enc28j60)

目录 LWIPLWIP简介LWIP主要特性 ENC28J60ENC28J60简介ENC28J60特点 无操作系统LWIP移植在说移植之前&#xff0c;先说下几个重要的函数功能和数据结构enc28j60.c文件主要结构体*netif*结构体定义&#xff08;netif.h&#xff09;只列出了比较重要的字段 lwip__comm.c文件__lwip…

lwip-2.1.3在STM32F103ZE+ENC28J60有线网卡上无操作系统移植(使用STM32 HAL库)

程序下载链接&#xff1a;百度网盘 请输入提取码&#xff08;提取码&#xff1a;k6tz&#xff09; 【重要说明】 连接方式一&#xff08;推荐&#xff09;&#xff1a; 电脑有线网卡断开&#xff0c;无线网卡连无线路由器&#xff0c;无线网卡配置成自动获取IP地址。 板子的E…

A/D和D/A

从我们学到的知识了解到&#xff0c;我们的单片机是一个典型的数字系统。数字系统只能对输入的数字信号进行处理&#xff0c;其输出信号也是数字信号。但是在工业检测系统和日常生活中的许多物理量都是模拟量&#xff0c;比如温度、长度、压力、速度等等&#xff0c;这些模拟量…

用计算机归零,windows自带的计算器清零快捷键是哪个?

满意答案 a1424440649 2013.01.15 采纳率:44% 等级:12 已帮助:7308人 清零键是esc,我用的Windows7,不知道计算器一样不,你试试... 其他的还有: 按键 功能 Atl+1 切换到标准模式 Alt+2 切换到科学型模式 Alt+3 切换到程序员模式 Alt+4 切换到统计信息模式 Ctrl+E 打开…

模数转换 A/D 与数模转换 D/A介绍

模数转换 A/D 与数模转换 D/A介绍 A/D 和 D/A 的基本概念 A/D 是模拟量到数字量的转换&#xff0c;依靠的是模数转换器(Analog to Digital Converter)&#xff0c;简称ADC。D/A 是数字量到模拟量的转换&#xff0c;依靠的是数模转换器(Digital to Analog Converter)&#xff0c…

《蓝桥杯CT107D单片机竞赛板》:矩阵键盘模块

矩阵键盘模块 实验简介实验原理图实验原理 实验程序显示对应的按键值2 * 2变式矩阵按键实现独立按键2 * 2变式矩阵键盘控制蜂鸣器2 * 2变式矩阵按键控制数码管做加减操作另一种易理解的扫描矩阵按键的方法 实验简介 CT107D单片机开发板上的矩阵键盘控制, 指示灯亮灭&#xff0c…

蓝桥杯单片机组(CT107D 开发板)总结

目录 添加芯片头文件两种程序开头写法使用 reg52.h 开头的程序使用 stc15f2k60s2.h 开头的程序 上电初始化软件延时&#xff08;ms&#xff09;数码管显示定时器初始化T0T1T2 外部中断初始化INT0INT1 矩阵键盘扫描EEPROM单字节读写多字节读写 AD/DAADCDAC 温度传感器时钟芯片串…