将80位Double转换为BigDecimal

时间:2017-03-28 06:19:10

标签: java floating-point aiff

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

我正在按照发现here的规范在Java中编写.aiff文件解析器。

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

  

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

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

我不知道如何将这些10个字节转换为Java DoubleBigIntegerDouble.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);

0 个答案:

没有答案
相关问题