c++ - 将整数数组转换为类数组

标签 c++ operator-overloading

我正在使用一个库,它向我传递一个指向 int32_T 数组的指针。我需要对这些数字做一些数学运算,但数据实际上在 Q23.8 中格式。

我创建了一个重载基本数学运算符的类,但我对如何将 int32_t 数组指针转换为我的新类感到困惑——数据类型的大小不同。有没有一种方法可以强制我的新类匹配 int32_t 的大小,或者是否有其他方法可以完成此操作?

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

最佳答案

首先,请注意,如果您不受性能的限制,仅受内存消耗的限制,@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!");

请注意,字段的顺序取决于 objective-c PU 字节顺序;该示例适用于小端。此外,为确保类的大小,您可能需要使用编译器的打包和对齐控制功能(例如 #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 、它们的便携性和局限性。

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

相关文章:

c++ - 访问者模式是区分 C++ 中参数类型的最快方法吗?

c++ - 如何获得指向 Eigen operator() 的函数指针

c++ - 错误 35 错误 C2661 : 'operator new' : no overloaded function takes 2 arguments

c++ - Range-v3运算符重载以编写较短的代码

c++ - 编译 Aruco 库?

c++ - 使用 new 创建 vector 是否安全?

c++ - C++中的运算符重载(小错误)

c++ - 如何使用 Visual Studio 2008 构建 libevent 版本 2.0.10

c++ - 使用 C++,我如何为所有类型包装一个 vector 并重载 []?

c++ - 重载乘法运算符