工作笔记(八)

2019-09-26  本文已影响0人  overflow_e4e4

java中byte[]和int互转

众所周知计算机中有二进制组成,byte有8位2进制组成,java中int由4位2进制组成。
今天由于某个需求我需要实现byte[4]和int的互转。
程序如下:

1. 首先是int转换成byte[]

 /**
     * int转换成byte[]
     * @param value
     * @return
     */
    static byte[] intToByte(int value) {
        byte[] bytes = new byte[4];
        bytes[0] = (byte) (value >> 24);
        bytes[1] = (byte) (value >> 16);
        bytes[2] = (byte) (value >> 8);
        bytes[3] = (byte) value;
        return bytes;

    }

int转换byte[]没有什么困难,就是依次往右位移8位就得到对应的byte值。

2. byte[]转换成int

/**
     *
     * @param bytes
     * @return
     */
    static int byteToInt(byte[] bytes) {
        return handleComplement(bytes[3]) + (handleComplement(bytes[2]) << 8) + (handleComplement (bytes[1]) << 16) + (unhandleComplement(bytes[0]) << 24);
    }

    /**
     * 不处理补码
     *
     * @return
     */
    static int unhandleComplement(byte b) {
        return b;
    }

    /**
     * 处理补码
     *
     * @return
     */
    static int handleComplement (byte b) {
        return (b & 0xff);
    }

这里要注意byte强转int是带符号的,比如有一byte为10000000,作为一个byte他的值为-128因为首位1是补码。但是我需要他作为一个int值的时候为240后面是10000000,他的值应该是256,程序中具体处理就是handleComplement(byte b)

上一篇下一篇

猜你喜欢

热点阅读