微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从短转换为字节,反之亦然

如何解决从短转换为字节,反之亦然

重组时,需要屏蔽字节1以停止对其进行符号扩展。

例如

    short oldshort = 700;

    byte byte1= (byte) (oldshort);
    byte byte2= (byte) ((oldshort >> 8) & 0xff);

    short newshort = (short) ((byte2 << 8) + (byte1&0xFF);

        System.out.println(oldshort);
    System.out.println(newshort);

编辑:对Java中字节和短裤的所有操作实际上都是作为整数完成的。因此,当您编写时+byte1,真正发生的是该字节首先转换为整数(符号扩展)。它仍将具有相同的值,但现在具有更多位。然后,我们可以屏蔽底部的8位,以得到短的原始8位-无符号。

E.g. short =511 = 0x01FE
     // lots of 0x000's because the operations are done on 32-bit int's
     byte1 = (0x000001FE & 0x000000FF) = (0x01FE & 0xFF) = 0xFE = (byte)-2
     byte2 = 0x1

     newShort = (byte2 << 8) + (byte1 & 0xFF)
              = (0x1 << 8) + (0xFE & 0xFF)
            // since the ops are performed as int's
              = (0x00000001 << 8) + (0xFFFFFFFE & 0x000000FF)
            // 0xFFFFFFFE = -2 
              = (0x00000100) + (0x000000FE)
              = 0x000001FE
              = 511

解决方法

我正在尝试将short转换为2个字节…然后从这2个字节尝试获取相同的short值。为此,我编写了以下代码:

        short oldshort = 700;

        byte 333= (byte) (oldshort);
        byte byte2= (byte) ((oldshort >> 8) & 0xff);

        short newshort = (short) ((byte2 << 8) + byte1);

            System.out.println(oldshort);
        System.out.println(newshort);

对于700(oldshort)的值,newhosrt为444。经过一些测试,它看起来像\ t。此代码仅适用于某些值。就像…如果oldshort =
50,那么它将正常工作..但是,如果它是-200或大于127(我认为)的值,它将不起作用。我想带符号的字节,二进制补码值等等都有问题,但是我不知道该怎么解决。

任何想法??在Java中执行此操作的任何本机方法?提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。