gpt4 book ai didi

c++ - 将 uint16_t * 数组转换为 std::vector

转载 作者:行者123 更新时间:2023-12-01 14:13:08 45 4
gpt4 key购买 nike

由于整数大小问题,我无法将 uint16_t 的指针数组转换为 std::vector

        auto *arr = static_cast<const uint16_t *>(some_method.getArray());
std::vector<uint16_t> vec(arr, sizeof arr / sizeof arr[0]);

在第一行中,我获得了一个 const uint16_t* 数组。在第二行中,我使用迭代器构造函数初始化 vector 并传入指针数组 arr 和数组长度(数组大小除以第一个元素的大小 = 数组长度)。

但是,c++ 想要我将 arr 转换为 unsigned long。所以这里是类型转换

        std::vector<uint16_t> vec((unsigned long) arr, sizeof arr / sizeof arr[0]);

在我看来,从 uint16_t(2 个字节)-> unsigned long(4 个字节)-> uint16_t(2 个字节)进行强制转换会发生一些不好的事情。有没有更好的方法来进行这种数组转换?

编辑:感谢大家的宝贵反馈,我遇到的主要问题:

  1. sizeof 获取指针的大小,而不是数组的长度。

  2. 我使用了错误的构造函数

最佳答案

uint16_t* arr;不是数组,而是指向位于内存中的数组的指针。这个指针的 sizeof 是一个包含地址的整数,总是等于 4。或者其他取决于体系结构的东西。但总是相同的常量,而不是数组的大小。

cout<< sizeof(arr)<< endl; // the output is 4

而 sizeof(arr[0]) 是 16 位整数的大小,因此始终为 2。然后 sizeof arr/sizeof arr[0] 将始终为 2。
可能您的方法 some_method.getArray() 返回某个大小的数组,您应该将该大小包含在一些 num_of_elements 变量中。所以使用那个 num_of_elements

std::vector<uint16_t> vec(arr, arr + num_of_elements);

关于c++ - 将 uint16_t * 数组转换为 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62950900/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com