gpt4 book ai didi

c - 将 uint16_t 数组传递给采用 uint8_t* 的函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:08 24 4
gpt4 key购买 nike

在 C 中,我想将一个 uint16_t 数组传递给一个接受 uint8_t 的函数:

bool fctn(uint8_t *data, size_t length);

我有这个数组,它在一个结构中:

typedef struct sStruct sStruct;
struct sStruct{
uint16_t d[10];
}
sStruct myStruct;

我也是这样的:

void test(sStruct structData) {
fctn( (uint8_t*)structData->d[0], 10*sizeof(uint16_t) );
}

长度不是这里的问题,它正在传递数组。如果这个数组已经不是一个指针我收到“错误:从不同大小的整数转换为指针”,如何让它看起来像一个 uint8_t 数组?就该函数而言,一个 uint16_t 数组看起来就像一个双倍长度的 uint8_t 数组,但我不确定如何告诉编译器……当输入已经是一个指针时。

如果数组 'd' 不在结构中,而是说只是一个全局的,我会这样做

fctn( (uint8_t*)d, 10*sizeof(uint16_t) );

在传递的结构中为数组执行函数传递的正确方法是什么?

最佳答案

当您说 uint16_t d[10]; 时,您正在定义一个数组 d。当你说 d[0] 时,你访问了该数组的第一个元素,它是 uint16_t 类型。该函数需要一个指针,因此您应该将指针转换为您的数组,而不是数组中的元素:

fctn( (uint8_t*)d, 10*sizeof(uint16_t) );

执行此操作时,d 从类型 uint16_t[10] 衰减为 uint16_t*,然后转换为 uint8_t* 在传递给 fctn 之前。

顺便说一句,您还可以使用 sizeof(d) 来简化您的长度计算:

fctn( (uint8_t*)d, sizeof(d) );

请注意,这仅在 d 被声明为数组(在堆栈上)时有效。

关于c - 将 uint16_t 数组传递给采用 uint8_t* 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com