1

tl;dr - 如何将 IEEE 754 80 位浮点数的二进制转换为 Java BigDecimal 或 Double?


我正在按照此处.aiff找到的规范用 Java 编写文件解析器。

我遇到了我的第一个主要障碍,该规范定义为“ extended”数据格式;

扩展:80 位 IEEE 标准 754 浮点数(标准 Apple 数字环境 [SANE] 数据类型扩展)。

它在文件中使用一次来描述声音的采样率(所以它非常重要)。

我不知道如何将这些 10 字节转换为 JavaDoubleBigInteger. Double.longBitsToDouble()只允许我使用该Long类型的 8 字节,并且BigDecimal缺少任何解释字节数组的方法。


再说一次,我假设我应该收到一个类似于 48khz 或 44.1khz 的数字。这是我的程序的一些调试输出;

Parsing AIFF File (foo.aif)
[Header: FORM, 6461086 bytes]
[Header: COMT, 410 bytes]
[Header: COMM, 18 bytes]
Sample rate: 3.025021223671622E23
[Header: CHAN, 32 bytes]
[Header: SSND, 6460590 bytes]

我尝试使用此处的建议计算采样率(我怀疑它会起作用);

byte[] sampleRateBytes = new byte[10];
inputStream.read(sampleRateBytes);
BigInteger intermediateRep = new BigInteger(sampleRateBytes);
sampleRate = new BigDecimal(intermediateRep);
4

0 回答 0