byte数组如何转为short数组

最近在搞毕业设计,做的是有关语音识别的手机应用。在处理音频的过程中,发现需要用short数组处理音频,可能光用byte会越界。但是java读文件没有一次性读到short数组中的api,要么是一个一个读short,要么读到byte数组后人工转为short数组。前者的行为和c++行为正好相反,主要是高低位问题,所以只能采取后者。

见代码:

public short[] byteArray2ShortArray(byte[] data, int items) {
  
short[] retVal = new short[items];
  
for (int i = 0; i < retVal.length; i++)
  retVal[i]
= (short) ((data[i * 2]&0xff) | (data[i * 2+1]&0xff) << 8);

  
return retVal;
}
虽然如今代码执行是对的,但是注意的是,data元素取出来后要先和0xff按位与一下,否则出来的结果又三分之一不到都是不对的。具体什么原因,请大神给予指点!

posted @ 2011-03-19 11:18  NickleZhang  阅读(4425)  评论(2编辑  收藏  举报