tl; dr - 如何将IEEE 754 80位浮点数的二进制转换为Java BigDecimal或Double?
我正在按照发现here的规范在Java中编写.aiff
文件解析器。
我的第一个主要障碍是该规范定义为“extended
”数据格式;
扩展:80位IEEE标准754浮点数(标准Apple数字环境[SANE]数据类型扩展)。
它在文件中使用一次来描述声音的采样率(所以它非常重要)。
我不知道如何将这些10个字节转换为Java Double
或BigInteger
。 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]
我尝试使用here的建议来计算采样率(我怀疑它会起作用);
byte[] sampleRateBytes = new byte[10];
inputStream.read(sampleRateBytes);
BigInteger intermediateRep = new BigInteger(sampleRateBytes);
sampleRate = new BigDecimal(intermediateRep);