Java语言中Byte转换为Int

1、按照一个字节打印byte数组

     /**
     * Print bytes data.
     */
    private void printBytesArray(@NonNull byte[] data) {
        StringBuilder sb = new StringBuilder();
        sb.append("【 ");
        for (byte element : data) {
            sb.append(String.format("%02x", element));
            sb.append(", ");
        }
        sb.append(" 】");
        Log.i(TAG, "printArray byte data: " + sb.toString() + "data[] length = " + data.length);
    }

2、打印Int数组

    /**
     * Print int data.
     */
    private void printIntArray(@NonNull int[] data) {
        StringBuilder sb = new StringBuilder();
        sb.append("【 ");
        for (int element : data) {
            sb.append(Integer.toHexString(element));
            sb.append(", ");
        }
        sb.append(" 】");

        Log.i(TAG, "printArray int data: " + sb.toString() + "data[] length = " + data.length);
    }

3、三个byte组合成一个Int类型

     /** dtc_result[0] = 0xC1;//高字节
     * dtc_result[1] = 0x92;//中字节
     * dtc_result[2] = 0x80;//低字节
     * dtc_result[3] = 0x9;//状态
     */
    private byte[] dtc_result, dt_result_valid;
    private int[] dtc_array;
    private int dt_result_valid_length;
    private int dt_result_valid_num;

    public void getValidDtc(byte[] dtc_result) {

        if ((dtc_result[3] > 3) && (dtc_result[3] % 4 == 3) && (dtc_result[6] == 0x1)) {
            dt_result_valid_length = dtc_result[3] - 3;
            dt_result_valid_num = dtc_result[3] / 4;
            dt_result_valid = new byte[dt_result_valid_length];
            dtc_array = new int[dt_result_valid_num];
            System.arraycopy(dtc_result, 10, dt_result_valid, 0, dt_result_valid_length);
            printBytesArray(dt_result_valid);

            for (int i = 0; i < dt_result_valid_num; i++) {
                dtc_array[i] = ((dt_result_valid[4 * i] << 16) & 0xFFFFFF) | ((dt_result_valid[4 * i + 1] << 8) & 0xFFFF) | ((dt_result_valid[4 * i + 2]) & 0xFF);
                int temp0 = (dt_result_valid[4 * i] << 16) & 0xFFFFFF;
                int temp1 = (dt_result_valid[4 * i + 1] << 8) & 0xFFFF;
                Log.d(TAG, "temp0 = " + temp0 + " temp1 " + temp1);
                Log.d(TAG, "printArray dtc_array[i] = " + i + " " + dtc_array[i]);
            }
            printIntArray(dtc_array);
        }
    }

关键点:高字节按位向左偏移16位,结果与0xFFFFFF,只要这三个字节;

中字节按位向左偏移8为,结果与0xFFFF,只要这两个字节;

低字节直接与0xFF,只要这一个字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值