【问题标题】:cast byte array pointer to int array pointer将字节数组指针转换为 int 数组指针
【发布时间】:2020-05-11 22:37:00
【问题描述】:

我有一个指向字节数组 (u8) 的指针。我现在有一个函数,它接受一个 int 类型的指针(unsigned int)。在不创建新数组和转换每个元素的情况下完成此任务的优雅方法是什么?

我需要将每个字节转换为单个 int。 (即 {0x12, 0x34, 0x56} --> {0x00000012, 0x00000034, 0x00000056})

void external_function(unsigned int *val, int length)
{
    //Write values to ...
}

void my_function(u8 *array)
{
    int length = 10;

    //Need to convert *array to (unsigned int *)
    external_function(array, length);
}

【问题讨论】:

  • 如果你这样做array[0] = input[0] 等等,C 会为你做这件事。
  • 如果external_function 不需要一次调用中的所有数据,您可以在没有int 数组的情况下执行此操作,方法是定义一个int 并从字节数组中迭代地为其分配一个值并将int 的地址传递给external_function,长度为一int。

标签: c arrays pointers


【解决方案1】:

在不创建新数组和转换每个元素的情况下,有什么优雅的方法可以完成此任务?

没有。这就是你必须这样做的方式。问题是您需要的元素之间的 00 字节不存在,而它是一个 byte 数组。

【讨论】:

  • 之所以不可能,是因为数组元素类型的内存布局,包括大小,是external_function的二进制接口的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多