当前位置: 首页 > 知识库问答 >
问题:

将uint8_t数组参数传递给除uint32_t之外的子例程(从uint8\t数组到uint32\t数组的转换)

公西马鲁
2023-03-14

我有一个如下的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]);
   }

我想要将数组A传递给上面提到的子例程,

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

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

问题是arrayA是类型uint8_tsub_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的一个单词。

我如何做到这一点?

共有3个答案

咸臻
2023-03-14
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]);
   }

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

   int main()
   {
     uint32_t temp[5] = {0};

     int i;  
     for(i=0; i<5; i++)
       temp[i]=arrayA[i];

     sub_data(5, temp);
     return 0;
   }

在这里,我将逐个分配数据以从数组uint32_t温度uint8_t像这样,

uint32_t temp[5] = {0};

     int i;  
     for(i=0; i<5; i++)
       temp[i]=arrayA[i];

这工作非常好。感谢@rici的评论。

贺聪
2023-03-14

您可以使用通用宏,并使用多个函数来处理参数。

示例:

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

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

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

#define sub_data(a,b) _Generic((b), \
              uint8_t *:  sub_data_8, \
              uint16_t *: sub_data_16, \
              uint32_t *: sub_data_32) (a,b)

uint8_t arrayA[] = {0x12, 0x34, 0x56, 0x78, 0x9a};
uint16_t arrayB[] = {0x13, 0x35, 0x57, 0x79, 0x9b};
uint32_t arrayC[] = {0x14, 0x36, 0x58, 0x7A, 0x9c};

int main()
{
    sub_data(5, arrayA);
    printf("-----------\n");
    sub_data(5, arrayB);
    printf("-----------\n");
    sub_data(5, arrayC);
    return 0;
}

https://onlinegdb.com/BJTqCPyJL

路欣荣
2023-03-14

您可以使用memcpy用每个uint8_

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);

 类似资料:
  • 假设我有2个无符号数字,每个32位,保存在一个数组中。第一个数字包含在位置 [0; 3] 中,第二个数字包含在位置 [4; 8] 中。我现在要更改其中一个数字的值,以下代码是否允许/有问题?

  • 问题内容: 有谁知道如何将C#ASP.NET数组传递给JavaScript数组?示例代码也将很好。 对不起,如果我以前的人含糊不清。这个问题实际上很简单。为了简单起见,我在文件中声明: 现在,我想传递给客户端,并在JavaScript中使用数组中的数据。我该怎么做? 问题答案: 您可以使用ClientScript.RegisterStartUpScript将javascript注入Page_Loa

  • 要将数组参数传递给函数,需指定不带方括号的数组名。例如,如果数组hourlyTemperatures声明如下: int hourlyTemperatures[24]; 则下列函数调用语句: modifyArray(hourlyTemperatutes,24); 将数组 hourlyTemperatures 及其长度传递给函数 modifyArray。将数组传递给函数时,通常也将其长度传递给函数,使

  • 问题内容: 我需要将字符串数组作为参数传递给MySQL存储例程。该数组可能很长,其元素数量不是固定的。然后,我想将字符串值放入具有一列的内存表中,以便可以处理数据。我不知道这是否可以在MySQL中完成。也许需要肮脏的解决方法。 例如,我有字符串值: 现在,我想从MySQL 表中获取有关这些水果的数据。伪代码: Microsoft SQL Server允许您使用数据类型并将数组作为XML字符串提交,

  • 问题内容: 我想将两个数组形式的java发送到oracle存储过程。第一个数组是字符串数组,第二个是字符数组,我怎样才能做到这一点? 问题答案: 这是一个如何做的例子。 以下脚本在数据库中设置表,类型和存储过程。该过程采用数组类型的参数,并将数组的每一行插入表中: 然后,Java代码演示如何将数组传递到此存储过程中: 如果先运行SQL脚本,然后运行Java类,然后查询表,则应该发现所有数据都已插入

  • 问题内容: 我正在尝试访问DetailsPage组件中的 ID ,但无法访问它。我试过了 将参数传递给DetailsPage,但徒劳。 所以有什么想法如何将ID传递给DetailsPage吗? 问题答案: 如果要将props传递到路线内的组件,最简单的方法是利用,如下所示: 您可以使用以下内容访问道具: 将需要通过原路线的道具,否则你将只能得到内。