安卓对接,对响应的的byte值处理为10进制

公司有个apk要与硬件对接拿到实时温度和重量,使用安卓基座进行处理,他那边相应2为16进制有效值,于是需要将值进行处理拿到正确的值

1.安卓基座传过来的byte数据,首先将byte组转换为16进制

// byte转16进制
function BytesToHexString(arrBytes) {
    var str = "";
    for (var i = 0; i < arrBytes.length; i++) {
        var tmp;
        var num = arrBytes[i];
        if (num < 0) {
            //此处填坑,当byte因为符合位导致数值为负时候,需要对数据进行处理
            tmp = (255 + num + 1).toString(16);
        } else {
            tmp = num.toString(16);
        }
        if (tmp.length == 1) {
            tmp = "0" + tmp;
        }
        str += tmp;
    }
    return str;
}

2.截取数组中我们需要的值,我这对接的是需要2位

let num1 = res.result.substr(6, 2);
let num2 = res.result.substr(8, 2);

3.再将16进制转为二进制


                let num12S = parseInt(num1, 16).toString(2)
                let num22S = parseInt(num2, 16).toString(2)

4.转为2进制后可能长度不够需要进行补零操作,定义补0方法将num12S,num12S进行补零

// 长度不够前置补0
function fillZero(num, length) {
    return num.padStart(length,0);
}

5.如果转换的二进制第一位是1那么其值就为负数,此时就需要对负数的二进制进行处理,将其变成正数,

function twoComplete(num) {
    const reg = /1|0/g;
    var binary = num.toString(2);
    var twoC = binary.replace(reg, (x) => { return x === "0" ? "1" : "0" }); //取反
    console.log(twoC);
    return `-${(parseInt(twoC, 2) + 1).toString(10)}`
}

6.如果不为负数使用16进制转10进制方法

// 16进制转10进制
function hex2int(hex) {
    var len = hex.length, a = new Array(len), code;
    for (var i = 0; i < len; i++) {
        code = hex.charCodeAt(i);
        if (48 <= code && code < 58) {
            code -= 48;
        } else {
            code = (code & 0xdf) - 65 + 10;
        }
        a[i] = code;
    }
    return a.reduce(function (acc, c) {
        acc = 16 * acc + c;
        return acc;
    }, 0);
}

7.使用如果首值为负数,那么就使用twoComplete方法

        if (num12S[0] == 1) {
                    uni.$cu.log('负号');
                    // resolve(twoComplete(`${num12S}${num22S}${num32S}${num42S}`));
                    resolve(twoComplete(`${num12S}${num22S}`));
                } else {
                    resolve(parseFloat(hex2int(`${num1}${num2}`)))
                   
                }

完整处理代码如下

function read2SP() {
    return new Promise((resolve, reject) => {
        SerialPortPlugin.read(handle, 16, 200, (res) => {//句柄,缓存大小,超时时间,回调
            // uni.showToast({title: JSON.stringify(res), duration: 1500, icon: 'none'})
            if (res.code === 200) {
       
                res.result = BytesToHexString(res.result)
           
              

                let num1 = res.result.substr(6, 2);
                let num2 = res.result.substr(8, 2);
            
  
      

              

                let num12S = parseInt(num1, 16).toString(2)
                let num22S = parseInt(num2, 16).toString(2)
              

                // 前置补0
                num12S = fillZero(num12S, 8);
                num22S = fillZero(num22S, 8);
              
                // 负号 -> 取反码 再补码
                if (num12S[0] == 1) {
                    uni.$cu.log('负号');
                    // resolve(twoComplete(`${num12S}${num22S}${num32S}${num42S}`));
                    resolve(twoComplete(`${num12S}${num22S}`));
                } else {
                    resolve(parseFloat(hex2int(`${num1}${num2}`)))
                 
                }

             
               
            } else {
                reject();
                console.log(`失败: ${res.message}`);
            }
        })
    })
}

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对接爱快DHCP的option十进制换十六进制.xlsx是一个用于将十进制数换为十六进制表示的Excel文件。DHCP(Dynamic Host Configuration Protocol)是一种用于自动分配IP地址和其他网络配置的网络协议。而爱快DHCP则是一种基于爱快(I love Kuai)公司开发的DHCP服务。 在该Excel文件中,你可以输入需要进行换的十进制数,然后通过公式或者函数进行换得到相应的十六进制表示。十进制数是我们平常使用的数字表示方式,而十六进制则是一种更方便在计算机中表示的数字系统。在十六进制中,除了0-9的数字外,还使用A、B、C、D、E、F来表示10-15这六个数字。 这个Excel文件的作用是帮助用户快速准确地完成十进制到十六进制的换工作,特别适用于需要以十六进制形式进行配置的网络设备和系统。它可以大幅提高用户的工作效率和准确性,减少了手动计算和换的错误可能性。 使用这个Excel文件,用户只需输入需要换的十进制数,并按下计算按钮或手动执行公式。然后,就可以在相应的单元格中得到换后的十六进制表示。这个Excel文件还可以根据用户需求进行扩展和定制,例如可以添加其他功能,支持批量换,或者进行其他格式的数换。 总之,对接爱快DHCP的option十进制换十六进制.xlsx是一个方便快捷地进行十进制到十六进制换的工具,帮助用户提高工作效率和准确性,适用于需要进行网络配置的场景。 ### 回答2: 对于对接爱快DHCP的Option十进制换为十六进制.xlsx,我理解为将十进制数换成十六进制数的Excel文件。 首先,我们需要了解十进制数和十六进制数的表示方式。十进制数是我们平时生活中最常用的数制,包括从0到9的十个数字。而十六进制数是一种基于16个符号(0-9和A-F)的数制。其中,A表示10,B表示11,以此类推,F表示15。 所以,对于这个Excel文件,我们可以使用以下方法将十进制数换为十六进制数: 1. 打开Excel文件,找到需要换的十进制数所在的列。 2. 在相应的十进制数下方的单元格中,使用Excel的公式函数进行换。例如,如果需要将十进制数192换成十六进制数,可以在相应单元格中输入 "=DEC2HEX(192)"。 3. 按下“回车”键,Excel会自动将十进制数换成十六进制数,并在相应的单元格中显示结果。在本例中,结果应该显示 "C0"。 4. 继续按照上述步骤,将所有需要换的十进制数都依次换为十六进制数。 通过上述步骤,我们可以将对接爱快DHCP的Option中的十进制数换为十六进制数,并在Excel文件中进行记录和管理。这样,我们就能更方便地使用这些数进行接口对接和配置。 最后,需要注意的是,在Excel中进行数换时,我们可以自定义格式或者使用公式进行换。根据具体的需求和使用场景,选择合适的方法来进行换即可。 ### 回答3: 爱快DHCP的option十进制换十六进制.xlsx是一个Excel文件,用来记录与爱快DHCP相关的选项的换结果。其中,十进制换为十六进制是一种常见的数字表示方式。 十进制是我们平时使用的十进制数系统,它由0到9这十个数字组成。而十六进制是一种更加简洁、紧凑的数制方法,它由0到9和字母A到F共16个字符组成。其中,A表示十进制的10,B表示十进制的11,以此类推,F表示十进制的15。 爱快DHCP中option的十进制到十六进制的换是为了方便在网络传输中进行信息的编码和解码。通过将十进制的数字换为十六进制表示,可以减少数据的长度,提高数据传输的效率。 使用这个Excel文件,可以输入十进制数,然后通过公式将其换为十六进制。这样就可以得到对应十进制数的十六进制表示。这个Excel文件可以帮助网络管理员、开发人员等快速进行相关数换操作,提高工作效率。 总之,爱快DHCP的Option十进制换十六进制.xlsx是一个方便进行数换的工具,可以简化数字的编码和解码过程,提高网络工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值