uint8_t 数组的数组

Posted

技术标签:

【中文标题】uint8_t 数组的数组【英文标题】:Array of uint8_t arrays 【发布时间】:2015-06-03 09:48:55 【问题描述】:

我有四个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[4][12] =  arrayOne,arrayTwo,arrayThree,arrayFour ;

但是当我将数组添加到 theArray 时,它们的值会发生变化。

为什么? 如何正确地将它们添加到数组中?

【问题讨论】:

请指定您要执行的操作:将它们复制到单个二维数组中,或创建这些数组 [指针] 的数组 [4]。 “添加”在这里的含义太广了。 (顺便说一句,这两种策略都已经回答了。) 【参考方案1】:

顶层数组应该只是一个指针数组:

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

您将丢失有关每个“行”长度的信息,但这没关系。

我认为您不能像示例中那样在初始化程序中引用数组,并自动将元素复制到更大的数组中。

【讨论】:

【参考方案2】:

您必须使用标头<string.h> 中声明的标准函数memcpy 复制结果数组中的每个数组。例如

#include <string.h>
#include <stdint.h>

//...

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

for ( size_t i = 0; i < sizeof( theArray ) / sizeof( *theArray ); i++ )

    memcpy( theArray[i], arrayPtrs[i], sizeof( theArray[i] ) );

【讨论】:

【参考方案3】:

您正在尝试使用 指向 uint8_t 的指针而不是 uint8_t 元素来初始化 uint8_t 数组

试试这个:

uint8_t *theArrays[] =  array1,array2, ... ;

【讨论】:

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

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

如何将字符数组转换为 uint8_t

c char 数组到 uint8_t 数组

切片一个 uint8_t 数组

以编程方式填充 uint8_t 数组

指向固定大小数组行为的指针