JAVA类型转换

一、byte[]类型转换为明码的String类型

    /**
     * @param bArray
     * @return
     * @byte[] 转成string
     */
    public String bytesToHexString(byte[] bArray) {
        StringBuffer sb = new StringBuffer(bArray.length);
        String sTemp;
        for (int i = 0; i < bArray.length; i++) {
            sTemp = Integer.toHexString(0xFF & bArray[i]);  //若为负数,则清除高位,正数不受影响
            if (sTemp.length() < 2)
                sb.append(0);
            sb.append(sTemp.toUpperCase());       //大写
        }
        return sb.toString();
    }


    在32位的电脑中数字都是以32格式存放的,如果是一个byte(8位)类型的数字,他的高24位里面都是随机数字,低8位才是实际的数据。java.lang.Integer.toHexString() 方法的参数是int(32位)类型,如果输入一个byte(8位)类型的数字,这个方法会把这个数字的高24为也看作有效位,这就必然导致错误,使用& 0XFF操作,可以把高24位置0以避免这样错误的发生。


二、明文String转换为byte[]类型

 /**
     * @param str
     * @return by qiao
     * 明文转
     * @string 转为byte[]
     */
    public byte[] hexStringToByte(String str) {
        if (str.length() % 2 != 0) {
            return null;
        }
        //都是大写字母就可以不转换成全大写
        str = str.toUpperCase();
        int len = str.length() / 2;
        char[] charArray = str.toCharArray();
        byte[] array = new byte[len];
        for (int i = 0; i < len; i++) {
            char hBit = charArray[2 * i];
            char lBit = charArray[2 * i + 1];
            int hNum = (hBit > '9') ? (hBit - 'A' + 10) : (hBit - '0');
            int lNum = (lBit > '9') ? (lBit - 'A' + 10) : (lBit - '0');
            array[i] = (byte) (hNum * 16 + lNum);
        }
        return array;
    }
三、对数据进行异或运算

    /**
     * 全体数据取亦或
     *
     * @param data
     * @return
     */
    public String  getCheckNum(byte[] data) {
        int checknum = 0;
        for (int i = 0; i < data.length; i++)      //qiao:开始i为0改为1,长度减去2
        {
            checknum = checknum ^ data[i];       //异或得出校验码   数据开始与0异或为本身
        }
        byte checkresult=(byte) checknum;
        return bytesToHexString(new byte[]{checkresult});     //int转string
    }

四、转成固定位数的Hex数值

    /**
     * @param bytecount 转成h固定位数的hex数值,如2byte,200,转成0200
     * @param data
     * @return
     */
    public String byteFromIntBCD(int bytecount,int data)
    {
        try
        {
            byte[] result=new byte[bytecount];
            String newdata=String.format("%0"+bytecount*2+"d",data);
            return newdata;
        }
        catch (Exception ex)
        {
            return String.format("%0"+bytecount*2+"d",0);
        }
    }

b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。
d,整数类型(十进制)。
x,整数类型(十六进制)。
o,整数类型(八进制)
n,平台独立的换行符, 也可通过System.getProperty("line.separator")获取

      
      // 0 代表前面补充0     
        // bytecount*2代表长度  
        // d 代表参数为正数型 

五、long型转成固定位数的Hex(实际转换getBytes)

    /**
     * @param bytecount 转成h固定位数的hex数值,如2,10,转成000A
     * @param data 右补齐
     * @return
     */
    public String byteFromInt(int bytecount,long data)
    {
        byte[] result=new byte[bytecount];
        String newdata=String.format("%0" +bytecount*2+"x",data);
        return newdata;
    }

六、byte[] 转GBK

    /**
     * byte[]STRING转GBK
     * @param data
     * @return
     */
    public String GetGbkString(byte[] data)
    {
        String result="";
        if (data.length==0)
            return "";
        try {
            result=new String(data,"gbk");
        } catch (UnsupportedEncodingException e) {
            result=new String(data);
        }
        return  result;

    }
七、Long转成Double 

   /**
     *Long转成double
     * @param data
     * @return
     */
    public double BytesToDouble(byte[] data)
    {
        String _stri = bytesToHexString(data);
        long sLat = Long.parseLong(_stri, 16);
        double result = sLat *1.0;                          //乘客位置纬度
        return result;
    }

八、byte[] 转GBK 

    public String TextDown(byte[] data){
        byte[] tag = new byte[1];
        System.arraycopy(data, 13, tag, 0, 1);    //标志

        byte[] describe = new byte[Protrol.getInstance().getMsgBodyLength(data) - 2];   //文本信息STRING
        System.arraycopy(data, 14, describe, 0, Protrol.getInstance().getMsgBodyLength(data) - 2);    //长度问题
        String s = "";
        try {
            s = new String(describe, "gbk");     //s文本信息

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return s;
    }


九、byte[]转10进制int

        byte[] tag = new byte[1];
        System.arraycopy(data, 13, tag, 0, 1);    //标志
        String qTag = Protrol.getInstance().bytesToHexString(tag);
        int questionTag = Integer.parseInt(qTag,16);
        System.out.println(questionTag+"标志");


十、左补齐0

    /**
     * 左补齐
     * @param bytecount
     * @param data
     * @return
     */
    public String byteFromIntRight(int bytecount,byte[] data)
    {
        try
        {
            byte[] result=new byte[bytecount];
            System.arraycopy(data,0,result,0,data.length);
            return bytesToHexString(result);
        }
        catch (Exception ex)
        {
            return String.format("%0"+bytecount*2+"d",0);
        }
    }





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值