byte数组如何转为short数组 (转)

Posted wikiki

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了byte数组如何转为short数组 (转)相关的知识,希望对你有一定的参考价值。

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

见代码:

 

 

publicshort[] byteArray2ShortArray(byte[] data, int items) {
  
short[] retVal =newshort[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按位与一下,否则出来的结果又三分之一不到都是不对的。具体什么原因,请大神给予指点!

 

data元素取出来后要先和0xff按位与一下,否则出来的结果又三分之一不到都是不对的。
##不熟悉JAVA,估计原因是这样的
Byte在执行位操作时,会隐式转换为带符号的Int类型,于是
首位是0的,值不变(0x7E => 0x0000007E)
首位是1的,值会变化(0xD3 => 0xFFFFFFD3)
如果直接拿首位是1的去进行位或操作,结果就会有问题
如果先执行一次&0xff,那么0xFFFFFFXX就会变为0x000000XX,保证结果的正确

以上是关于byte数组如何转为short数组 (转)的主要内容,如果未能解决你的问题,请参考以下文章

为啥java虚拟机jvm要把byte和short的运算都转为int

java short 数组转换 byte数组

VB.net 如何将bytes()字节数组转换到short型数组?

java short 数组转换 byte

如何把一个byte数组的数字转换成int

golang中string类型的数组字典如何提取?