将 uint8_t 数组传递给方法

Posted

技术标签:

【中文标题】将 uint8_t 数组传递给方法【英文标题】:Pass uint8_t array to method 【发布时间】:2015-06-03 11:30:58 【问题描述】:

我有四个uint8_t 数组:

uint8_t arrayOne[12]   =  0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x01,0xC1,0x00,0x01 ;

uint8_t arrayTwo[12]   =  0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x4E,0x2D,0x00,0x0C ;

uint8_t arrayThree[12] =  0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x01,0xF3,0x00,0x01 ;

uint8_t arrayFour[12]  =  0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x20,0x04,0x00,0x01 ;

我已将它们添加到数组中:

uint8_t *theArray[] =  arrayOne,arrayTwo,arrayThree,arrayFour ;

现在我想把这个数组传递给一个方法,例如:

[self theMethod:theArray];

到:

-(void)theMethod:(uint8_t *)pointersArray[]
...
...

将数组指向 -(void)theMethod... 中的方法的正确方法是什么?

【问题讨论】:

“我已将它们添加到数组中”。不,你没有。 uint8_t *theArray = arrayOne,arrayTwo,arrayThree,arrayFour ; 不是有效的 C 并且不会编译。发布您正在使用的实际代码。 这是一个 Objective-C。它会编译。 好的,为你去掉了C标签。 有效的 C 是有效的 Objective-C。问题的第一部分是 C。 @Roo uint8_t *theArray 应该是 uint8_t *theArray[] 【参考方案1】:

这一行:

uint8_t *theArray =  arrayOne,arrayTwo,arrayThree,arrayFour ;

实际上是创建一个数组,其中填充了 指向您的数组的指针,这些数组转换为 uint8_t 值。我不认为这是你想要的。

所以首先(注意双指针):

uint8_t *theArray[] =  arrayOne,arrayTwo,arrayThree,arrayFour ;

那么你的 ObjC 方法就变成了:

-(void)theMethod:(uint8_t **)pointersArray 


【讨论】:

那我怎样才能在那个方法中得到“uint8_t arrayOne[12]”呢? uint8_t *arrayOne = pointersArray[0]; 然后你可以做arrayOne[11] 或者你需要的任何索引。【参考方案2】:

声明你的方法来接收指向数组指针的指针

-(void)theMethod:(uint8_t **)pointersArray
...
...

通过像这样传递方法来调用方法

[self theMethod:&theArray];

【讨论】:

以上是关于将 uint8_t 数组传递给方法的主要内容,如果未能解决你的问题,请参考以下文章

将指向 uint16_t 的指针传递给需要 C 中 uint8_t[] 数组的子例程 - 如何?

将 int16_t 变量转换为 uint8_t 以传递给函数

如何将字符数组转换为 uint8_t

将 unsigned char 数组转换为 uint8_t 数组?

用元素加载 std::queue<uint8_t*> 的更有效方法?

将 Intrinsic xmm 寄存器转换为 uint8_t 数组[16]