gpt4 book ai didi

java - Java中读取字节

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:44 27 4
gpt4 key购买 nike

我试图理解以下代码行的工作原理:

for (int i = 0; i < numSamples; i++) {
short ampValue = 0;
for (int byteNo = 0; byteNo < 2; byteNo++) {
ampValue |= (short) ((data[pointer++] & 0xFF) << (byteNo * 8));
}
amplitudes[i] = ampValue;
}

据我了解,这是以包容的方式读取 2 个字节(每个样本 2 个字节),即 ampValue 由两个字节读取组成。数据是实际的数据样本(文件),指针不断增加以读取到最后一个样本。但我不明白这部分:

"data[pointer++] & 0xFF) << (byteNo * 8)); "

另外,我想知道如果我想将其读为 double 而不是短精度是否有什么区别?

最佳答案

看起来 data[] 是字节数组。

data[pointer++] 为您提供 [-128..127] 范围内的字节值。

0xFF 是一个 int 常量,所以...

data[pointer++] & 0xFF 将字节值提升为 [-128..127] 范围内的 int 值。然后 & 运算符将 0xFF 中未设置的所有位清零(即,它将高 24 位清零,只留下低 8 位。

该表达式的值现在将在 [0..255] 范围内。

<< 运算符将结果左移 (byteNo * 8) 位。也就是说,它将值乘以 2 的 (byteNo * 8) 次方。当byteNo==0时,它将乘以2的0次方(即乘以1)。当byteNo==1时,会乘以2的8次方(即乘以256)。

此循环从数组中的每对字节创建一个 [0..65535](16 位)范围内的 int,将每对字节的第一个成员作为低位字节,将第二个成员作为低位字节。高位字节。

将 ampValue 声明为 double 是行不通的,因为 |= 运算符不适用于 double,但您可以将amplitudes[] 数组声明为 double 数组,并赋值 amplitudes[ i] = ampValue 会隐式将该值提升为 [0.0..65535.0] 范围内的 double 值。

<小时/>

其他信息:不要忽视@KevinKrumwiede 关于示例中错误的评论。

关于java - Java中读取字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25474981/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com