使用CAPL 内置函数 memcpy 和memcmp 处理数组的若干问题
创始人
2024-02-08 05:14:54
0
  • 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对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

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...