C/CAPL 从一个数组定义另一个数组
C/CAPL defining one array from another
这是我的第一个问题,请注意我是编码新手。快速搜索对我没有帮助,因为我认为答案可能太简单了。
我正在用 CAPL(一种基于 C 的 CANoe 特定语言)编写一些代码。
简化我的场景:我必须读取 10 个值输入,但我只能一次读取一个(由于硬件原因)。
我的值存储在缓冲区 (rsBuf) 中,现在我试图为每次读取值 (rsBuf1 ... 10) 定义一个帮助数组。
最后,我将创建另一个数组,添加值 rsBuf1 ... rsBuf10.
对于每个 "read-action",我想定义
rsBuf1 = rsBuf;
rsBuf2 = rsBuf;等等...
错误:对于 "rsBuf1 = rsBuf;" (732,16) 处的错误 1112:操作数类型不兼容。
编译失败 -- 1 个错误,0 个警告
我的 "real" 值:
variables
{
byte rsBuf[1024];
byte rsBuf1[1024];
}
有没有一种简单的方法可以从一个数组到另一个数组?
我还尝试了一些我发现的其他符号,例如 rsBuf1 = {rsBuf},但没有帮助。我当然可以定义
rsBuf1[1]=rsBuf[1];
...
rsBuf1[1024]=rsBuf[1024];
但我想那是浪费时间。
提前致谢,罗伯特干杯
您不能在 C 中通过赋值复制数组,因为语法不允许这样做。最好的解决方案是使用 memcpy
函数。
或者,如果对程序设计有意义,您可以将数组放在包装器结构中:
typedef struct
{
int array [5];
} array_wrapper_t;
array_wrapper_t this = {1,2,3,4,5};
array_wrapper_t that;
that = this;
这应该会产生与调用 memcpy
.
相同的机器代码
选项 1
您可以按如下方式使用memcpy
来复制整个数组:
memcpy(rsBuf1, rsBuf, elcount(rsBuf));
以下将复制前四个字节:
memcpy(rsBuf1, rsBuf, 4);
选项 2
您可以选择定义复制函数,请参阅 copy_buffer()
实现:
variables
{
byte rsBuf[1024] = {1, 2, 3, 4, 5, 6, 7, 8};
byte rsBuf1[1024];
}
on start
{
print_buffer(rsBuf, 8);
print_buffer(rsBuf1, 8);
copy_buffer(rsBuf1, rsBuf, elcount(rsBuf));
print_buffer(rsBuf1, 8);
}
void copy_buffer(byte dest[], byte src[], long len)
{
int i;
for (i = 0; i < len; i++)
dest[i] = src[i];
}
void print_buffer(byte buf[], byte len)
{
int i;
writeLineEx(0, 0, ">");
for (i = 0; i < len; i++)
writeEx(0, 0, " 0x%02x", buf[i]);
}
这是我的第一个问题,请注意我是编码新手。快速搜索对我没有帮助,因为我认为答案可能太简单了。
我正在用 CAPL(一种基于 C 的 CANoe 特定语言)编写一些代码。 简化我的场景:我必须读取 10 个值输入,但我只能一次读取一个(由于硬件原因)。
我的值存储在缓冲区 (rsBuf) 中,现在我试图为每次读取值 (rsBuf1 ... 10) 定义一个帮助数组。 最后,我将创建另一个数组,添加值 rsBuf1 ... rsBuf10.
对于每个 "read-action",我想定义 rsBuf1 = rsBuf; rsBuf2 = rsBuf;等等...
错误:对于 "rsBuf1 = rsBuf;" (732,16) 处的错误 1112:操作数类型不兼容。 编译失败 -- 1 个错误,0 个警告
我的 "real" 值:
variables
{
byte rsBuf[1024];
byte rsBuf1[1024];
}
有没有一种简单的方法可以从一个数组到另一个数组? 我还尝试了一些我发现的其他符号,例如 rsBuf1 = {rsBuf},但没有帮助。我当然可以定义 rsBuf1[1]=rsBuf[1]; ... rsBuf1[1024]=rsBuf[1024];
但我想那是浪费时间。 提前致谢,罗伯特干杯
您不能在 C 中通过赋值复制数组,因为语法不允许这样做。最好的解决方案是使用 memcpy
函数。
或者,如果对程序设计有意义,您可以将数组放在包装器结构中:
typedef struct
{
int array [5];
} array_wrapper_t;
array_wrapper_t this = {1,2,3,4,5};
array_wrapper_t that;
that = this;
这应该会产生与调用 memcpy
.
选项 1
您可以按如下方式使用memcpy
来复制整个数组:
memcpy(rsBuf1, rsBuf, elcount(rsBuf));
以下将复制前四个字节:
memcpy(rsBuf1, rsBuf, 4);
选项 2
您可以选择定义复制函数,请参阅 copy_buffer()
实现:
variables
{
byte rsBuf[1024] = {1, 2, 3, 4, 5, 6, 7, 8};
byte rsBuf1[1024];
}
on start
{
print_buffer(rsBuf, 8);
print_buffer(rsBuf1, 8);
copy_buffer(rsBuf1, rsBuf, elcount(rsBuf));
print_buffer(rsBuf1, 8);
}
void copy_buffer(byte dest[], byte src[], long len)
{
int i;
for (i = 0; i < len; i++)
dest[i] = src[i];
}
void print_buffer(byte buf[], byte len)
{
int i;
writeLineEx(0, 0, ">");
for (i = 0; i < len; i++)
writeEx(0, 0, " 0x%02x", buf[i]);
}