本帖最后由 czp14778981 于 2013-11-28 18:42:00 编辑

解决方案 »

  1.   

    你byte能装下那么多么,你强转的时候已经丢失精度了,自己打印下数组的数据就知道了
      

  2.   

    你byte能装下那么多么,你强转的时候已经丢失精度了,自己打印下数组的数据就知道了
      

  3.   

    你byte能装下那么多么,你强转的时候已经丢失精度了,自己打印下数组的数据就知道了
      

  4.   

    0xffd0转成short类型,应该是多少
      

  5.   

    你是说0xff吗?果然如此,变成-1了,我还以为会是-127呢,那我怎么能把0xffd0转成正确的short类型呢?
      

  6.   

    java都是符号数据类型,-32720这个值怎么算出来的?
      

  7.   

    客户是这样规定的:0xffd0转成二进制就是1111 1111 1101 0000,第一位是符号位,后面是15位是实际值,后十五位转成十进制就是32720
      

  8.   

    0xffd0&0x7FFF多打个0,抱歉。。如果好用的话,楼主别忘了结贴
      

  9.   

    关键是把byte[1]&0x7f后,还得把符号位保留,然后在还原也挺麻烦的
      

  10.   

    0xffd0转成short类型,真实值就是-48
    如果非要是-32720,那说明0xffd0是原码,而不是计算机用的补码,不能用常规方法转
      

  11.   

    public static void main(String[] args) {
    int i=0xffd0;
    int s;
    if (i>0x7fff) {
    s=-(i-0x8000);
    } else {
    s=i;
    }
    System.out.println(s);
    }
      

  12.   

    有了解电力系统的IEC104规约吗?那个规约就是这么转的,真是挺别扭的
      

  13.   

    public static void main(String[] args) {
    int i=0xffd0;
    short s;
    if (i>0x7fff) {
    s=(short)-(i-0x8000);
    } else {
    s=(short)i;
    }
    System.out.println(s);
    }
      

  14.   

    下面是我写的两字节的byte数组按原码的方式转成short类型,还没经过严格测试,不知道有没有bug,欢迎大家指正
    public static short getSignedShort(byte[] bytes) {
    short s = 0;
    if((bytes[1] & 0x80) == 0x80 ) //判断符号位是否为负数
    s = (short) -((0xff & bytes[0]) | (0x7f00 & (bytes[1] << 8)));
    else
    s = (short) ((0xff & bytes[0]) | (0xff00 & (bytes[1] << 8)));
    return s;
    }