首页 > 解决方案 > 将 uint8_t 数组参数传递给除 uint32_t 之外的子例程(从 uint8_t 数组转换为 uint32_t 数组)

问题描述

我有一个如下的 C 子程序,

   int sub_data (uint32_t size, uint32_t arrayB[])
   {
     int i;
     for(i=0; i<size; i++)
       printf("arrayB[%0d] = %2x\n", i , arrayB[i]);
   }

我想将下面的arrayA传递给上面提到的子程序,

   uint8_t arrayA = {0x12, 0x34, 0x56, 0x78, 0x9a};

   int main()
   {
     sub_data(5, arrayA);
     return 0;
   }

问题是 arrayA 的类型是 uint8_t 和 sub_data 除了参数为 uint32_t 我的要求是 sub_data 应该从 arrayA 中获取单个单词并作为单个单词存储在 arrayB 中

所以最终的印刷品应该是,

arrayB[0] = 12
arrayB[1] = 34
arrayB[2] = 56
arrayB[3] = 78
arrayB[4] = 9a.

我正在努力进行转换。我想到的所有解决方案是将arrayA的四个字存储到arrayB的一个字中。但是我想要arrayA的单个单词作为arrayB的单个单词。

我该如何做到这一点?

标签: carraystype-conversion

解决方案


您可以使用每个数组元素memcpy填充数组,并将其传递给函数: uint32_tuint8_t

uint8_t arrayA[5] = {0x12, 0x34, 0x56, 0x78, 0x9a};

uint32_t arrayB[5] = {0, 0, 0, 0, 0};

for (int i=0; i<5; i++)
    memcpy(&arrayB[i], &arrayA[i], sizeof(arrayA[i]));

sub_data(5, arrayB);

推荐阅读