【发布时间】:2014-04-08 18:58:52
【问题描述】:
我正在用 c++ 程序读取 .wav 文件。
.wav 格式的样本是uint8_t 或int16_t。是否可以根据具体文件的格式来声明变量?
一种解决方案是:
int16_t sample;
if (bits==8)
{
uint8_t temp8;
in.read((char*)&temp8,bits);
sample = (int16_t) temp8;
}
else
{
in.read((char*)&sample,bits);
}
从现在开始我可以使用sample。然而,这似乎不是很方便,在 8 位的情况下,变量 sample 比它所需要的要大。
我相信这也可以通过联合来完成,但无论如何它仍然会使变量占用 2 个字节。
我真正想要的是:
if(bits==8)
uint8_t sample;
else
int16_t sample;
但范围超出了条件语句。
【问题讨论】:
-
您可以将其设为模板函数
-
@dutt 模板在编译时被解析,所以绝对不会。
-
如果你是老派,请使用 void 指针
-
您的原始解决方案对我来说似乎是最好的
-
@remudada void 指针似乎提供了一个有趣的解决方案,但指针算术和数组似乎相当有限,不是吗?
标签: c++