c++ - int24 - 24 位整数数据类型

标签 c++

C++ 中有 24Bit 原始整数数据类型吗?

如果没有,是否可以创建一个类 int24 (, uint24 ) ?

它的目的可能是:
* 处理 24 位格式的声音文件
* 在没有 alphachannel 的情况下操作位图数据

提前多谢

哎呀

最佳答案

根据要求,我会使用位域。

struct int24{
    unsigned int data : 24;
};

或者,如果分隔更容易,只需使用 3 个字节(字符)。

顺便说一句,您在问题中提到的两个用例通常都使用 32 位整数。在音频处理的情况下,在加载音频 block 时,您通常会转换为 32 位整数(或 float ,最好是防止使用定点或整数数学时出现溢出情况),因为您不会有一次将整个文件保存在内存中。

对于图像数据,人们只是倾向于使用 32 位整数而忽略 alpha 8 alpha 位,或者如果您正在处理紧凑的格式,您可能最好将它们作为字符指针进行操作因为您将所有 channel 分开。无论如何,这将是性能/内存的权衡,因为写一个 int 通常比单独写三个字符要快;但是它会多占用 25% 的内存。

像这样的打包结构是特定于编译器的。但是,在 Visual Studio 中,您将执行以下操作以使结构恰好为 24 位。

#pragma pack(push, 1)
struct int24{
    unsigned int data : 24;
};
#pragma pack(pop)

关于c++ - int24 - 24 位整数数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2682725/

相关文章:

android - 优化 Android/iOS 设备上的巨大 VBO 绘图

c++ - 关于 std::unordered_multimap 中键唯一性的保证

c++ - 强制复制构造函数而不是移动构造函数

c++ - _snprintf_s 调用 [applicaiton].exe 已触发断点

c++代码的安全性与有符号和无符号之间的隐式转换

c++ - 在 C 和 C++ 中从 jpeg 读取黑白像素作为数组

android - 使用 qmake 构建 android arm64 native 库

c++ - 排序前显示的随机数

c++ - 具有转发引用的静态多态性

c++ - 将类的实例传递给 pthread_create