• & 0xFF 作用 取低8位


    & 0xFF 取低8位

    @Test
    void byteTest() {
    
        byte hex1 = (byte) 127;
        byte hex2 = (byte) 383;
        byte hex3 = (byte) 0x7F;
    
        RandomAccessFile writeFile = null;
        try {
            //写入头文件
            writeFile = new RandomAccessFile("D:\\temp\\hex.txt", "rw");
            byte[] bytes = new byte[3];
            bytes[0] = hex1;
            bytes[1] = hex2;
            bytes[2] = hex3;
            writeFile.write(bytes, 0, bytes.length);
        } catch (Exception ex) {
            logger.error(ex.getMessage(), ex);
        } finally {
            try {
                if (writeFile != null) {
                    writeFile.close();
                }
            } catch (Exception ex) {
    
            }
        }
        logger.info("成功");
    }
    @Test
    void lowerOrderTest() {
        // 65304 = 1111 1111 0001 1000
    
        int h1 = ((65304));  //直接返回原数据 => 65304
        int h2 = ((65304 >> 4)); //右移4位,高位补0 => 0000 1111 1111 0001 => 1111 1111 0001 => 4081
    
        /**
         *  取低8位(FF)
         *  0xFFF = 11111111
         *  & 相同数为1 不同数为0
         *  1111 1111 0001 1000
         *            1111 1111
         *  0000 0000 0001 1000
         *  11000 => 24
         */
        int h3 = ((65304) & 0xFF);
    
        /**
         *  >> 4  先右移4位, 高位补0
         *  1111 1111 0001 1000
         *  0000 1111 1111 0001
         *  & 0xFF 取低8位
         *  0000 1111 1111 0001
         *            1111 1111
         *  0000 0000 1111 0001
         *  11110001 => 241
         */
        int h4 = ((65304 >> 4) & 0xFF);
    
        logger.info("\n{}\n{}\n{}\n{}",h1,h2,h3,h4);
    }
     short、int 转byte数组
    /**
     * 32536 => 0111 1111 0001 1000 最左边为符号位
     * 默认从低位到高位的顺序取值
     * b[0] = 111 1111 0001 1000 & 0xFF = 0001 1000 = 24
     * b[1] = 111 1111 0001 1000 >> 8 & 0xFF = 0111 1111 = 127
     */
    public static byte[] shortToBytes(short shortValue, ByteOrder byteOrder) {
        byte[] b = new byte[Short.BYTES];
        if (ByteOrder.LITTLE_ENDIAN == byteOrder) {
            b[0] = (byte) (shortValue & 0xFF);
            b[1] = (byte) ((shortValue >> Byte.SIZE) & 0xff);
        } else {
            b[1] = (byte) (shortValue & 0xFF);
            b[0] = (byte) ((shortValue >> Byte.SIZE) & 0xff);
        }
        return b;
    }
    
    
    /**
     * int 转 byte 同理
     */
    public static byte[] intToBytes(int intValue, ByteOrder byteOrder) {
    
        if (ByteOrder.LITTLE_ENDIAN == byteOrder) {
            return new byte[]{
                    (byte) (intValue & 0xFF),
                    (byte) ((intValue >> 8) & 0xFF),
                    (byte) ((intValue >> 16) & 0xFF),
                    (byte) ((intValue >> 24) & 0xFF)
            };
    
        } else {
            return new byte[]{
                    (byte) ((intValue >> 24) & 0xFF),
                    (byte) ((intValue >> 16) & 0xFF),
                    (byte) ((intValue >> 8) & 0xFF),
                    (byte) (intValue & 0xFF)
            };
        } 
    }
  • 相关阅读:
    生成唯一流水码
    搜索类
    数字转中文
    字符串转数组工具类
    类转换
    P1112 区间连续段
    P1113 同颜色询问
    Turtlebot3 机器学习
    Turtlebot2进阶教程
    turtlebot A2
  • 原文地址:https://www.cnblogs.com/vipsoft/p/16241685.html
Copyright © 2020-2023  润新知