将整数数组转换为类数组

时间:2015-06-03 20:44:19

标签: c++ operator-overloading

我使用库传给了一个指向int32_T数组的指针。我需要对这些数字进行一些数学计算,但数据实际上是Q23.8格式。

我创建了一个重载基本数学运算符的类,但我仍然坚持如何将int32_t数组指针强制转换为我的新类 - 数据类型的大小不同。有没有办法强制我的新班级匹配int32_t的大小,还是有另一种方法来完成这项工作?

注意:我想避免复制这个大型数组的每个项目,因为我正在开发资源受限的系统。

1 个答案:

答案 0 :(得分:1)

首先,请注意,如果您不受性能限制,仅受内存消耗的限制,@ Aumnayan建议的解决方案可能更适合简单性和便携性。

为了强制您的对象匹配大小int32_t和Q23.8的对齐方式,您可以使用位字段:

struct Q_23_8
{
    int32_t fractional :  8;
    int32_t integral   : 23;
};

static_assert(sizeof(Q_23_8) == sizeof(int32_t), "Sizes differ!");

请注意,字段的顺序取决于目标CPU字节顺序;样本是小端的。另外,为了确保类的大小,您可能需要使用编译器的打包和对齐控制功能(例如#pragma pack)。

拥有int32_t encoded[],您可以将其解释为Q_23_8数组,如下所示:

Q_23_8* decoded = reinterpret_cast<Q_23_8*>(encoded);

以下是完整的代码示例:http://ideone.com/X177fQ。我强烈建议reading more about bit-fields,它们的可移植性和限制。