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请问如何转换

解决方案 »

  1.   

    设置一个临时字节数组tmp,大小为2.
    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);以上代码没有测试过,仅提供思路。
      

  2.   

    参考如下代码:
    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;
    }