• java基本类型与byte字节数组的转换(包含大端,小端)


        近期java项目中需要解析来自c/c++的字节数据,但是解析的过程中涉及到了字节数组数据大端、小端排序的问题,所以整理补充了基本类型short、int、long与byte数组以分别大端和小端相互转换的方法。

     /**
         * 将int转为高字节在前,低字节在后的byte数组(大端)
         * @param n int
         * @return byte[]
         */
        public static byte[] intToByteBig(int n) {
            byte[] b = new byte[4];
            b[3] = (byte) (n & 0xff);
            b[2] = (byte) (n >> 8 & 0xff);
            b[1] = (byte) (n >> 16 & 0xff);
            b[0] = (byte) (n >> 24 & 0xff);
            return b;
        }
     /**
      * 将int转为低字节在前,高字节在后的byte数组(小端)
      * @param n int
      * @return byte[]
      */
        public static byte[] intToByteLittle(int n) {
            byte[] b = new byte[4];
            b[0] = (byte) (n & 0xff);
            b[1] = (byte) (n >> 8 & 0xff);
            b[2] = (byte) (n >> 16 & 0xff);
            b[3] = (byte) (n >> 24 & 0xff);
            return b;
        }
        /**
         * byte数组到int的转换(小端)
         * @param bytes
         * @return
         */
        public static int bytes2IntLittle(byte[] bytes )
        {
            int int1=bytes[0]&0xff;
            int int2=(bytes[1]&0xff)<<8;
            int int3=(bytes[2]&0xff)<<16;
            int int4=(bytes[3]&0xff)<<24;
    
            return int1|int2|int3|int4;
        }
        /**
         * byte数组到int的转换(大端)
         * @param bytes
         * @return
         */
        public static int bytes2IntBig(byte[] bytes )
        {
            int int1=bytes[3]&0xff;
            int int2=(bytes[2]&0xff)<<8;
            int int3=(bytes[1]&0xff)<<16;
            int int4=(bytes[0]&0xff)<<24;
    
            return int1|int2|int3|int4;
        }
        /**
         * 将short转为高字节在前,低字节在后的byte数组(大端)
         * @param n short
         * @return byte[]
         */
        public static byte[] shortToByteBig(short n) {
            byte[] b = new byte[2];
            b[1] = (byte) (n & 0xff);
            b[0] = (byte) (n >> 8 & 0xff);
            return b;
        }
    
        /**
         * 将short转为低字节在前,高字节在后的byte数组(小端)
         * @param n short
         * @return byte[]
         */
        public static byte[] shortToByteLittle(short n) {
            byte[] b = new byte[2];
            b[0] = (byte) (n & 0xff);
            b[1] = (byte) (n >> 8 & 0xff);
            return b;
        }
        /**
         *  读取小端byte数组为short
         * @param b
         * @return
         */
        public static short byteToShortLittle(byte[] b) {
            return (short) (((b[1] << 8) | b[0] & 0xff));
        }
        /**
         *  读取大端byte数组为short
         * @param b
         * @return
         */
        public static short byteToShortBig(byte[] b) {
            return (short) (((b[0] << 8) | b[1] & 0xff));
        }
        /**
         * long类型转byte[] (大端)
         * @param n
         * @return
         */
        public static byte[] longToBytesBig(long n) {
            byte[] b = new byte[8];
            b[7] = (byte) (n & 0xff);
            b[6] = (byte) (n >> 8  & 0xff);
            b[5] = (byte) (n >> 16 & 0xff);
            b[4] = (byte) (n >> 24 & 0xff);
            b[3] = (byte) (n >> 32 & 0xff);
            b[2] = (byte) (n >> 40 & 0xff);
            b[1] = (byte) (n >> 48 & 0xff);
            b[0] = (byte) (n >> 56 & 0xff);
            return b;
        }
        /**
         * long类型转byte[] (小端)
         * @param n
         * @return
         */
        public static byte[] longToBytesLittle(long n) {
            byte[] b = new byte[8];
            b[0] = (byte) (n & 0xff);
            b[1] = (byte) (n >> 8  & 0xff);
            b[2] = (byte) (n >> 16 & 0xff);
            b[3] = (byte) (n >> 24 & 0xff);
            b[4] = (byte) (n >> 32 & 0xff);
            b[5] = (byte) (n >> 40 & 0xff);
            b[6] = (byte) (n >> 48 & 0xff);
            b[7] = (byte) (n >> 56 & 0xff);
            return b;
        }
           /**
         * byte[]转long类型(小端)
         * @param array
         * @return
         */
        public static long bytesToLongLittle( byte[] array )
        {
            return ((((long) array[ 0] & 0xff) << 0)
                    | (((long) array[ 1] & 0xff) << 8)
                    | (((long) array[ 2] & 0xff) << 16)
                    | (((long) array[ 3] & 0xff) << 24)
                    | (((long) array[ 4] & 0xff) << 32)
                    | (((long) array[ 5] & 0xff) << 40)
                    | (((long) array[ 6] & 0xff) << 48)
                    | (((long) array[ 7] & 0xff) << 56));
        }
    
        /**
         * byte[]转long类型(大端)
         * @param array
         * @return
         */
        public static long bytesToLongBig( byte[] array )
        {
            return ((((long) array[ 0] & 0xff) << 56)
                    | (((long) array[ 1] & 0xff) << 48)
                    | (((long) array[ 2] & 0xff) << 40)
                    | (((long) array[ 3] & 0xff) << 32)
                    | (((long) array[ 4] & 0xff) << 24)
                    | (((long) array[ 5] & 0xff) << 16)
                    | (((long) array[ 6] & 0xff) << 8)
                    | (((long) array[ 7] & 0xff) << 0));
        }
  • 相关阅读:
    01.mp4v2应用—mp4转h264
    00.mp4v2工具的用法
    交叉编译x264和ffmpeg
    pcm2aac
    保存一下东西
    05.移植内核3.4.2
    04.移植u-boot
    03.应用程序调试
    关于 jxl 下载 excel (java)
    JXL 对excle 操作(单元格合并,列宽,格式等)
  • 原文地址:https://www.cnblogs.com/hopeofthevillage/p/12917113.html
Copyright © 2020-2023  润新知