CAPL内置的与Struct Byte有关函数

本文介绍了CAPL语言中与StructByte相关的函数,包括memcmp()和memcpy系列函数,用于比较和复制字节数据。文章详细解释了函数的用途、语法和参数,并通过示例代码展示了如何在小端模式下使用这些函数。内容涵盖了不同平台如Windows和Linux的支持情况,以及字节序在嵌入式系统中的重要性。
摘要由CSDN通过智能技术生成

CAPL内置的与Struct Byte有关函数

在CAPL中我们要经常和Struct Byte 打交道,为了方便的写CAPL脚本,所以我整理了Vector官方提供的与Struct Byte有关的函数,并对常用的进行简单说明。

本文大部分摘录自Vector的官方文档,做了整理与翻译,增加了自己的理解, 并将代码改造的更加优雅实用一些。

一、CAPL中与Struct Byte有关的函数

Windows和Linux支持这些CAPL功能。Linux下的功能尚未经过全面测试。

Functions Short Description
memcmp 比较入参中的字节(bytes) 数据
memcpy 字节(bytes) 从源复制到目标
memcpy_h2n 字节(bytes)结构(struct) 复制到数组(array)
memcpy_n2h 数组(array) 中的字节(bytes) 填充结构(struct)
memcpy_off 字节(bytes) 从源复制到目标,并给出目标起始偏移量

为了便于理解本文中的示例代码,所以需要提前知道下面的知识:

  1. DWORD 就是 Double Word, 每个word为2个字节的长度; DWORD双字即为4个字节,每个字节是8位,共32位
  2. 小端(Little Endian) 模式 是嵌入式领域经常用到的排序方式, 特征为: 低位字节排放在内存的低地址端,高位字节排放在内存的高地址端

二、 Struct Byte操作: 比较多个字节

2.1 函数: memcmp()

函数语法
int memcmp(struct * dest, byte source[]); // form 1

int memcmp(byte dest[], struct * source); // form 2

int memcmp(struct * dest, struct * source); // form 3

int memcmp(byte dest[], byte source[], dword size); // form 4
函数功能描述

比较入参的字节数据。在格式3中,两个结构必须具有相同的类型。

函数参数介绍
参数 含义
dest A struct
source Another struct
size Size of the arrays (number of bytes to compare).
返回值介绍

如果字节(bytes) 相等,则为0;如果它们不相等,则为非0的值

举例说明

关于memcmp()函数说明的示例代码:

on key 's'
{
   
  byte data[4];
  struct WrapDword
  {
   
     dword dw;
  } dwordWrapper;

  int i;
  for (i = 0; i < elcount(data); ++i){
   
    data[i] = i; 
  }
  dwordWrapper.dw = 0x03020100;
  
  if (memcmp(dwordWrapper, data) == 0){
   
    write("Data represents the number: Little Endian is used.");
  }
}

如果采用了小端(Little Endian)模式 (一般的主机都是小端模式), 输出结果:

Data represents the number: Little Endian is used.

三、 Struct Byte操作: 拷贝字节

在这一章节中,我们介绍四个函数:memcmp()memcpy_n2h()memcpy_n2h()memcpy_off() 四个函数, 它们的功能非常相似, 而且都是从memcmp() 的功能上进行简单的变种。

3.1 函数: memcmp()

这个函数是最通用的拷贝字节函数,作用: 将字节(bytes) 从源复制到目标。

函数语法
void memcpy(byte dest[], struct * source); // form 1

void memcpy(char dest[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值