美文网首页计算机杂谈
2019-08-28/byte字节数组相关操作

2019-08-28/byte字节数组相关操作

作者: 呼噜噜睡 | 来源:发表于2019-08-28 23:20 被阅读0次

写一些根java中的byte操作相关的吧。在java中byte占据一个字节,byte类型的取值范围是[-128, 127]。有时候需要跟c或者c++接口对接,c语言中是有无符号byte的概念的,但是java中没有,因此需要中间做一些处理和转换。好了,下面是一些工具方法,有需要的同学可以拿去用。

public class NumberUtil {
    /**
     * 将byte数组转为int数组   针对的是无符号byte,在其他语言中的byte可以是无符号的,范围为0~255,但是java的byte范围是-128~127
     * @param bytes
     * @return
     */
    public static int[] getIntFromUnsignedByte(byte[] bytes){
        if(bytes == null||bytes.length==0){
            return null;
        }
        int[] ints = new int[bytes.length];
        for(int i=0;i<bytes.length;i++){
            ints[i] = getIntFromUnsignedByte(bytes[i]);
        }
        return ints;
    }

  /**
  *java提供了一些有符号 无符号转化相关的类,原理跟下面是一致的
  */
    public static int getIntFromUnsignedByte(byte b){
            return b&0xff;
    }

    /**
     * 将byte数组转为字符串形式,各个byte之间以指定字符隔开,默认是空格
     * @param bytes
     * @return
     */
    public static String getBytesString(byte[] bytes,String separater){
        if(bytes == null||bytes.length==0){
            return null;
        }
        StringBuffer sb = new StringBuffer();
        if(separater==null){
            separater = "";
        }
        for(int i=0;i<bytes.length;i++){
            sb.append(bytes[i]).append(separater);
        }
        return sb.toString().trim();
    }

    /**
     * 将int数组转为字符串形式,各个int之间以指定字符隔开,默认是空格
     * @param ints
     * @return
     */
    public static String getIntsString(int[] ints,String separater){
        if(ints == null||ints.length==0){
            return null;
        }
        if(separater==null){
            separater = "";
        }
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<ints.length;i++){
            sb.append(ints[i]).append(separater);
        }
        return sb.toString().trim();
    }


    /**
     * 左边的数当作高位,左边的数当作低位,求它们的和
     * @param high
     * @param low
     * @return
     */
    public static int getHighAndLowSum(int high,int low){
        return (high<<8)+low;
    }

    /**
     * 数组按照某种高低位顺序放置元素,求它们的和  fromLowToHigh:true 元素从低位到高位放置
     * @param array
     * @param fromLowToHigh
     * @return
     */
    public static long getHighAndLowSum(int[] array,boolean fromLowToHigh){
        if(array==null||array.length==0){
            return 0L;
        }
        Long sum = 0L;
        if(fromLowToHigh){
            for(int i=0;i<array.length;i++){
                sum = sum+(((long)array[i])<<(8*i));
            }
        }else{
            for(int i=0;i<array.length;i++){
                sum = sum+(((long)array[i])<<(8*(array.length-1-i)));
            }
        }
        return sum;
    }

}

相关文章

网友评论

    本文标题:2019-08-28/byte字节数组相关操作

    本文链接:https://www.haomeiwen.com/subject/mewvectx.html