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/