【发布时间】:2020-10-01 16:46:17
【问题描述】:
我想将一个字节数组外推成一个双精度数组。
我知道如何在 Java 中做到这一点。但是 AS 转换器不适用于此... :-D
这是我想用 Kotlin 写的类:
class ByteArrayToDoubleArrayConverter {
public double[] invoke(byte[] bytes) {
double[] doubles = new double[bytes.length / 2];
int i = 0;
for (int n = 0; n < bytes.length; n = n + 2) {
doubles[i] = (bytes[n] & 0xFF) | (bytes[n + 1] << 8);
i = i + 1;
}
return doubles;
}
}
这将是预期结果的典型示例:
class ByteArrayToDoubleArrayConverterTest {
@Test
fun `check typical values`() {
val bufferSize = 8
val bytes = ByteArray(bufferSize)
bytes[0] = 1
bytes[1] = 0
bytes[2] = 0
bytes[3] = 1
bytes[4] = 0
bytes[5] = 2
bytes[6] = 1
bytes[7] = 1
val doubles = ByteArrayToDoubleArrayConverter().invoke(bytes)
assertTrue(1.0 == doubles[0])
assertTrue(256.0 == doubles[1])
assertTrue(512.0 == doubles[2])
assertTrue(257.0 == doubles[3])
}
}
有什么想法吗?谢谢!!!
【问题讨论】:
-
您只进行了 16 位转换。双打不应该更多吗?
-
很好的洞察力,@NomadMaker。它适用于 16 位音频。这样就可以了。
-
问题是您正在制作一个 16 位整数,然后将其隐式转换为双精度数。好像效率不高。
-
其实我对这种操作并不熟悉。我只想在 Kotlin 中做到这一点。
-
样式注释,而不是
val bytes = ByteArray(bufferSize) ...,你可以一次性声明和初始化:val bytes = byteArrayOf(1,0,0,1,0,2,1,1)