Java 如何将字节数组转换为整数?

Java 如何将字节数组转换为整数?,java,javasound,pcm,wave,Java,Javasound,Pcm,Wave,我有一个包含纯声音数据的字节数组。我想把它转换成整数。每个样本的位是16。帧速率为44100。但如何将其转换为整数?long value=0; long value = 0; for (int i = 0; i < by.length; i++) { value += ((long) by[i] & 0xffL) << (8 * i); } for(int i=0;i

我有一个包含纯声音数据的字节数组。我想把它转换成整数。每个样本的位是16。帧速率为44100。但如何将其转换为整数?

long value=0;
long value = 0;
for (int i = 0; i < by.length; i++)
{
   value += ((long) by[i] & 0xffL) << (8 * i);
}
for(int i=0;ivalue+=((long)by[i]&0xffL)只是为了澄清:您有一个
字节[]
,它包含成对的
字节来形成一个整数?这样:
{int1B1,int1B2,int2B1,int3B2,}

如果是这样,您可以将它们组合成如下所示的整数:

int[] audio = new int[byteArray.length/2];
for (int i = 0; i < byteArray.length/2; i++) { // read in the samples
  int lsb = byteArray[i * 2 + 0] & 0xFF; // "least significant byte"
  int msb = byteArray[i * 2 + 1] & 0xFF; // "most significant byte"
  audio[i] = (msb << 8) + lsb;
}
int[]audio=newint[byteArray.length/2];
对于(inti=0;iaudio[i]=(msb尝试在for循环中使用它。它对我很有用(有符号的16位样本,小端)

//16位,litte-endian(第一位是最低有效位)
int LSB=(int)b[i*2]&0xff;
int MSB=(int)b[1+i*2]&0xff;

x[i]=((谢谢您的帮助。但是我无法理解[i]&0xffl的行:value+=((长))这是一个算法,如果第一个字节是lsb,你可以使用一系列的方法和方法…记住ByteBuffer也可以做这项工作。我想得到一个2字节的整数。意思是,整数的大小是2字节。我应该怎么做?我在答案中发布了什么(如果数组的第一个值是lsb)-那将是最快的方法…它不起作用4U吗?你需要更精确。将包含声音数据的字节数组转换为“整数”没有意义。问你一个问题:你的字节数组包含16位样本,但它们是有符号的还是无符号的?我们在处理它的时候字节顺序是什么?是PCM还是别的?是PCM little endian,它们是有符号的。谢谢你的回答。我不明白(ub2您将字节保存在
ub1
ub2
中。现在我们要将它们连接到一个16位的值。因此我们需要(按位)将最高有效字节向左移位并将两者相加。此代码用于小尾端,因为第一个字节是最低有效字节。如果您不知道
确定,
&
是一个按位and运算符。因此,结果位将是两个操作数的对应位,并相互进行and运算:
b3[i]=b1[i]和b2[i]
这只适用于我在倒数第二行交换ub2和ub1时(即写下:“音频[I]=(ub1
//16 bit, litte endian (the first is the least significant)
int LSB=(int)b[i*2] & 0xff;
int MSB=(int)b[1+i*2] & 0xff;

x[i]=((MSB<<8)+LSB);
if((b[i*2+1)]&0x80)!=0)//Check the sign
       x[i]=-(65536-x[i]);