【发布时间】:2013-07-21 19:42:11
【问题描述】:
我有一个函数需要一个指向uint16_t 类型向量的指针。该函数用数据填充向量。我还有应该保存数据的对象,但是以uint8_t 类型的向量的形式。我的代码如下所示:
void fill1(vector<uint16_t> *data);
void fill2(vector<uint64_t> *data);
class Object
{
uint32_t data_depth;
vector<uint8_t> data;
}
Object object1;
object1.data_depth = 16;
fill1((vector<uint16_t>*) &object1.data);
Object object2;
object2.data_depth = 64;
fill2(vector<uint64_t>*) &object2.data);
// somewhere later in the code
if (object1.data_depth == 16)
vector<uin16_t> * v = (vector<uint16_t>)(&objec1.data);
是不同类型向量指针转换的保存方式吗?
【问题讨论】:
-
我很确定这是个坏主意。为什么不填充Object的成员函数?
-
不安全。这是错误的,因为向量包含原始数据之外的其他信息
-
我认为解决此问题的最佳方法是将数据从 uint16 复制到另一个 uint8(反之亦然),同时在需要时为每个元素执行从一种类型到另一种类型的实际数据转换,我donno 我自己(所以你实际上不是在复制,你是在旧数据的基础上创建新数据)
-
我使用向量
来保存原始信息。其实我忘了说对象本身知道数据深度是16位。因此,当我要访问 Object 的数据时,我会将其处理为 16 位值。 -
目前尚不清楚您要在这里完成什么。您是否尝试存储原始字节并将它们作为单个字节访问,或者您是否尝试将 16 位值存储在 8 位向量中(这会导致截断)?无论哪种方式,转换向量肯定是错误的。您可以通过转换底层数组指针来摆脱它。
标签: c++ pointers vector casting