for(...) {
  byte b = inputData[i];
  short n;
  if(b<=127)
    n = b;
  else
    n = b-255;
}

解决方案 »

  1.   

    for(...) 
    {
      byte b = inputData[i];
      short n;
      if(b<=127)
        n = b;
      else
        n = b-255;
    }
      

  2.   

    楼上的太奇怪了,byte的范围就是-128~127
    if(b<=127) 有什么意义,这个是永真式
      

  3.   

    public static  short[] ConvertToShort(byte[] inputData) {    if(inputData==null) return null;
       if(inputData.length%2!=0) throw new IllegalArgumentException();
       short[] result=new short[inputData.length>>1];
       for(int i=0;i<inputData.length;i+=2){
          byte low=inputData[i];
          byte high=inputData[i+1];
          int bit4=0x0000000f;
          int temp=(high>>>4)&bit4;
          int s=temp;
          s<<=4;
          temp=high&bit4;
          s|=temp;
          s<<=4;
          temp=(low>>>4)&bit4;
          s|=temp;
          s<<=4;
          temp=low&bit4;
          s|=temp;
          result[i>>1]=(short)s;
       }
       return result;
      }
      

  4.   

    楼上果然强。配服。不过,high>>>4 不知是不是写错了。
      

  5.   

    看错了
    用一个DataInput读byte[],用DataOutput输出short[]
      

  6.   

    to:treeroot(根根) 
    1、能注释一下你的程序吗?
    2、为什么你是以4位为单位移动?
       我写了个简短的程序,以8位为单位移动,效果跟你的相似:
    public class ByteToShort {
      public static void main(String[] args) {
        byte[] inData = {-2,-1};
        short[] rtData = new short[inData.length/2];
        rtData[0] = inData[1];
        rtData[0] = (short)(rtData[0] << 8);
        rtData[0] += inData[0];
        System.out.println(rtData[0]);
      }
    }
    3.我用下面的main函数测试你的程序
     public static void main(String[] args) {
        BToS bts = new BToS();
        byte[] inData = {2,-1};
        short[] rtData = ConvertToShort(inData);
        for (int i = 0; i < rtData.length; i++)
          System.out.println("" + rtData[i]);
      }
    inData = {2,-1}时输出为-254,inData = {-2,-1}时输出为-2;
    而在相同的输入条件下,我的ByteToShort类输出的是-254和-258。
    4.请教
      我写了另外一个函数,企图将rtData[0]=-258存到inData[0]和inData[1]中,结果得到的结果是inData={-2,-2},而不是原来的inData = {-2,-1},这正是我困惑的地方。
      

  7.   

    TO:loosong(路松)
    非常感谢你提出不同意见,这里我一一解答,这个问题看起来很简单,实际上我觉得非常复杂.
    1.因为java没有无符号数,但是这里必须当作无符号数处理,一般都是用位运算符号,而不是用算术运算符号,因为这里设计到负数的补码表示,就不一一介绍.2.这里不是不能以8位移动,但是容易出错,就像你的程序一样,这里设计到一个转换的问题,你的程序是有问题的.
    public class ByteToShort {
      public static void main(String[] args) {
        byte[] inData = {-2,-1};
        short[] rtData = new short[inData.length/2];
        rtData[0] = inData[1];
        rtData[0] = (short)(rtData[0] << 8); 
        rtData[0] += inData[0];//这里是错误的 
        System.out.println(rtData[0]);
      }3.我的程序输出的结果是正确的,你的程序在上面出了问题.4.你可以先自己分析一下自己的程序,不要用算术运算符号
      

  8.   

    pygmalion2002() 
    for(...) 
    {
      byte b = inputData[i];
      short n;
      if(b<=127)
        n = b;
      else
        n = b-255;//n = b - 256
    }
      

  9.   

    看我的法则,如果用java确实很麻烦,这是c语言的题
    直接指针转化即可,若硬要用java,也好。jni用上。哈哈。说笑了好题,
      

  10.   

    请问这里有人 提供jsp 聊天室的原代码吗?谢谢
      

  11.   

    可以请发到[email protected]
    jsp 聊天室原代码
    还有怎么法帖呀