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

时间:2012-08-27 09:54:23

标签: java javasound pcm wave

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

3 个答案:

答案 0 :(得分:3)

要清除:您有一个byte[],其中包含byte对形成一个整数?像这样:{int1B1, int1B2, int2B1, int2B2, int3B1, 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;
}

当然,您可以将该循环优化为单行循环,但我更喜欢这种方式以获得更好的可读性。此外,根据数据的字节顺序,您可以切换ub1和ub2。

答案 1 :(得分:1)

long value = 0;
for (int i = 0; i < by.length; i++)
{
   value += ((long) by[i] & 0xffL) << (8 * i);
}

你也可以创建一个sting并使用Integer valueOf或Integer构造函数

答案 2 :(得分:1)

尝试在for循环中使用它。它适用于我(签名16位样本,小端)。

//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]);