byte数组bt的定义为:byte[] bt=new byte[180000];
short数组st的定义为:short[] st=new st[120000];....................//填充bt数组的代码部分bt和st的关系为:三个连续的字节将构成st中两个short数据,bt中的前三个字节为:128 120 70 需要转换到st中前两个short,第一个short为bt中第一个byte和第三个byte的高四位合成,第二个short为bt中第二个byte和第三个byte低四位合成,以此类推。比如:bt中前三个字节为11110011 10101100 01111010 则st中的第一个short为:1111001101110000 而第二个short为1010110010100000请问如何转换
short数组st的定义为:short[] st=new st[120000];....................//填充bt数组的代码部分bt和st的关系为:三个连续的字节将构成st中两个short数据,bt中的前三个字节为:128 120 70 需要转换到st中前两个short,第一个short为bt中第一个byte和第三个byte的高四位合成,第二个short为bt中第二个byte和第三个byte低四位合成,以此类推。比如:bt中前三个字节为11110011 10101100 01111010 则st中的第一个short为:1111001101110000 而第二个short为1010110010100000请问如何转换
byte[] tmp = new byte[2];
对于第1个short,把bt[0]的值赋给tmp[0],bt[2]右移4位赋给tmp[1],再用BitConvert.ToInt16()把tmp转换为short放入st中。
tmp[0] = bt[0];
tmp[1] = bt[2] >> 4;
st[0] = BitConvert.ToInt16(tmp);
对于第2个short,把bt[1]的值赋给tmp[0],bt[2]的值与0xf进行与运算再赋值给tmp[1],然后再转换为short。
tmp[0] = bt[1];
tmp[1] = bt[2] & 0xf;
st[1] = BitConvert.ToInt16(tmp);以上代码没有测试过,仅提供思路。
int j = 0;
for (int i = 0; i < st.Length; i += 2)
{
st[i + 0] = (short)(bt[j + 0] << 8 | bt[j + 2] & 0xF0);
st[i + 1] = (short)(bt[j + 1] << 8 | bt[j + 2] << 4 & 0xF0);
j += 3;
}