使用CAPL 内置函数 memcpy 和memcmp 处理数组的若干问题
Posted 蚂蚁小兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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];
- 内置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");
else
write("equal");
📙 总结
上面根据6个问题,介绍了最常用的一些赋值/比较的用法,更深一层的用法可以参考下Help文档。
memcpy 和memcmp 函数 根据参数不同重载了很多,不管是byte 数组,还是char 字符串,还是struct 结构体,都是在内存中占用连续内存的,都可以使用memcpy相互赋值。
- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
以上是关于使用CAPL 内置函数 memcpy 和memcmp 处理数组的若干问题的主要内容,如果未能解决你的问题,请参考以下文章