1.接收蓝牙数据转10进制

// 十进制
const newArr = Array.from(new Uint8Array(res.value)); //res.value为arrayBuffer数据
that.wirteNewArr(newArr);

解释:为何需  高位 * 256 + 低位

在计算机中,二进制数以位为单位进行存储和处理。一个字节(byte)有 8 位,因此一个 16 位的二进制数可以被拆分为两个 8 位的字节(高位字节和低位字节)。在进行字节序的转换时,需要将高位字节与低位字节的顺序交换,也就是将高位字节放在低位字节的位置,将低位字节放在高位字节的位置。

因此,我们需要将高位字节左移 8 位,然后再加上低位字节,才能得到正确的结果。左移操作相当于将一个数乘以 256,因为 $2^8=256$。因此,左移 8 位相当于将高位字节乘以 256,然后加上低位字节,就可以得到正确的结果了。

举例来说,假设我们有一个 16 位的数:0xABCD。它的高位字节是 0xAB,低位字节是 0xCD。如果要将其转换为大端序,就需要将高位字节和低位字节的位置交换,变成:0xCDAB。因此,我们需要计算出 0xCDAB 对应的十进制数。计算的过程如下:

0xABCD = 171 × 256 + 205 = 44,364
0xCDAB = 205 × 256 + 171 = 52,203

因此,此时的字节序就被正确地转换为了大端序。

2.高位 * 256 + 低位

getResultList(arr,flag) {let list = [];let num = '';arr.forEach((item, index)=> {if(index % 2 == 0) {num = item * 256;}else {num += item;if(flag ===  true) {num = this.twosComplement(num,16);}list.push(num)}})return list;},

3.转有符号数

// 二进制补码  value:要转换的无符号整数,bits:该整数占用的二进制位数twosComplement(value, bits) {const max = 2 ** (bits - 1);if (value < max) {// 如果 value 小于 2^(bits-1),则 value 是一个非负数,直接返回即可return value;} else {// 如果 value 大于等于 2^(bits-1),则 value 是一个负数,需要转换为补码表示// 具体地,需要将 value 减去 2^bits,相当于将其最高位从 1 变为 0,其他各位不变// 例如,对于 8 位二进制数来说,2^8 = 256,如果 value = 0b10000000(即 -128),则需要执行以下操作://   value - 256 = 0b10000000 - 0b100000000 = 0b10000000 + 0b100000000 = 0b110000000 = -128return value - 2 ** bits;}},

注解:twosComplement函数用于将一个无符号整数转换为有符号整数。具体地,对于一个 value 的 bits 位二进制表示,如果最高位为 0,表示 value 是一个正整数;如果最高位为 1,表示 value 是一个负整数,采用二进制补码表示。

函数的参数 value 表示要转换的无符号整数,bits 则表示该整数占用的二进制位数。函数的返回值为转换后的有符号整数。

例如,对于值 0xFC0E,它的二进制表示为 1111110000001110,共 16 位。因此,可以使用以下代码将其转换为有符号整数:

const value = parseInt('FC0E', 16); // 将 0xFC0E 解析为十进制数,即 64526
const signedValue = twosComplement(value, 16); // 转换为有符号整数,即 -1007

因为 0xFC0E 的二进制表示的最高位是 1,所以它被解释为一个负整数。该函数将其转换为 16 位的二进制补码表示,即 1111111111000001,对应的十进制值为 -1007

2 ** (16 - 1)注解

2 ** (16 - 1) 表示的是 $2^{15}$,即一个 16 位的二进制数中最高位的数字 1 所对应的十进制数。在二进制补码表示中,最高位表示符号位,因此,一个 16 位的有符号整数的取值范围为 $-2^{15}$ 到 $2^{15}-1$(即十进制数的范围为 $-32,768$ 到 $32,767$),其中正数采用原码或反码表示,负数采用补码表示。

因此,当我们需要判断一个 16 位的整数是否为负数时,可以通过检查最高位是否为 1 来确定。如果最高位为 1,那么这个数就是一个负数,需要使用二进制补码表示。而如果最高位为 0,那么这个数就是一个非负数,可以使用原码或反码表示。

在上面的代码中,使用 2 ** (16 - 1) 来计算一个 16 位有符号整数的最大正值,即 $2^{15}-1$,也就是 32,767。如果一个 16 位整数的值小于这个最大正值,那么它就是一个正数,表示方式与原码或反码相同;如果它的值等于或大于这个最大正值,那么它就是一个负数,需要使用二进制补码表示。

蓝牙arrayBuffer数据转10进制在转有符号数相关推荐

  1. Java 将26进制数据转为10进制、十进制数据转为其它进制

    1.十进制数据转为其它进制 /*** 进制转换* @param data 十进制数据* @param radix 待转换的进制* @return 转换后的字符串显示*/private String t ...

  2. 随记 oracle to_number将16进制的数据转换为10进制

    --f: 需要转换的参数,xx:转换后的位数 select to_number('f','xx') from dual;

  3. Python实现16进制转10进制算法及源码

    Python实现16进制转10进制算法及源码 16进制是一种常用的数学计数方式,而在Python中将16进制数据转换为10进制数据是非常简单和快捷的.下面我将展示如何使用Python实现16进制转10 ...

  4. 超大数据10进制转2进制详解(可推广到其他进制)/ Codeup 100000579 问题 C: 进制转换

    问题C:进制转换 时间限制 内存限制 1.000sec 32MB 题目描述: 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出. 输入: 多组数据,每行为一个长度不超过30位的十进制非负整 ...

  5. 关于signed char类型的16进制数据转成带符号的10进制问题

    文章目录 前言 signed char类型的16进制数据如何转成带符号的10进制数? 总结 前言 在最近的学习中,遇到了一个疑惑,三组16进制的数据分别为0xFF,0xF3,0x2A;这三组16进制的 ...

  6. mysql 10 进制 转36_mysql 10进制与35进制之间的转换 注意Power处理bigint的问题

    35进制的目的是防止0和O造成的视觉误差 BEGIN DECLARE m_StrHex35 VARCHAR(100); -- 返回35进制表示的结果 DECLARE m_Remainder BIGIN ...

  7. 10进制转换成其他进制-短除法

    将10进制下的n转换成b进制下的数. 代码如下: char get(int x) {if (x<=9) return x+'0';return x-10+'A'; }string base(in ...

  8. 2进制 , 8进制 , 10进制 , 16进制 , 介绍 及 相互转换 及 快速转换

    为什么要使用进制数 数据在计算机中的表示,最终以二进制的形式存在 , 就是各种 <黑客帝国>电影中那些 0101010- 的数字 ; 我们操作计算机 , 实际 就是 使用 程序 和 软件 ...

  9. SQL 16进制数转化10进制

    16进制数"0X00037FFE9994EE5E"转化为10进制是多少? 我们用SQL转化察看下: select CONVERT(bigint,cast(0X00037FFE999 ...

最新文章

  1. 比拼 Kafka , 大数据分析新秀 Pulsar 到底好在哪
  2. 前端网络知识目录(持续更新)
  3. 打算近期去深圳找工作
  4. HDLBits答案(21)_Verilog有限状态机(8)
  5. 与时间相关的java源码_Java 调整日期和时间
  6. 计算机打印中 进纸盘2,软件、计算机和打印机接口问题-HP.PDF
  7. 语言运算顺序题目_我的Python学习笔记:今天我学了关于Python里的运算符及运算顺序...
  8. 海康威视、大华监控摄像头rtsp地址规则
  9. Java虚拟机(四)——类加载机制
  10. spring boot @value_spring+vue全栈开发实战-第二章Spring Boot 基础配置-笔记0302-2020
  11. 深入理解C语言指针的奥秘-4
  12. 在 Mac 上如何获取扩展来自定 Safari 浏览器?
  13. 240.搜索二维矩阵II
  14. gorm软删除_删除 |《GORM 中文文档 v1》| Go 技术论坛
  15. VUE引入阿里icon
  16. Android 10 使用PreferenceScreen的方法
  17. WIN7系统下安装SQLServer2000 + sp4数据库报错之解决办法
  18. doc、docx文档批量合并
  19. ios审核要注意的地方(转)
  20. 大话设计模式C++实现-第7章-代理模式

热门文章

  1. 【apk破解尝试之旅】-——apk文件的反编译与回编译
  2. zypper命令使用示例
  3. ARMv8 ARM64 架构 整体介绍
  4. PHP图表制作工具集
  5. Goolge页面展示3D效果问题
  6. Java之东拉西扯——杂谈篇(共五篇)
  7. Android应用--简、美音乐播放器实现专辑倒影效果
  8. 涛涛车业通过注册:半年营收7.7亿同比降16% 拟募资6亿
  9. 深度学习-三维卷积神经网络(3DCNN)
  10. 电感高频阻抗计算及导线寄生电容与电感