JS - 4字节转单精度浮点数

2023-11-07

JS 数据类型

JS 是一种弱类型的语言,它的数据类型包含字符串值,数值,布尔值,数组,对象。虽然我们的数值类型包含浮点数整数等,但是在这里统称为 数值类型。同时 JavaScript 拥有动态类型,我们定义变量时无须指定数据类型。这也意味着我们的强制转换在JS中将失效。

若在 C/C++ 中,可以通过内存转换或联合体实现。但在 JavaScript 中这些方法是无效的(亦或是我太 cai 不知道怎么转)。

IEEE754 是现在公认的、最广泛使用的浮点数转换运算标准,被许多 CPU 与浮点运算器所采用。

IEEEE475

那我们先来看一下 IEEEE475Float 格式,有 32bit 以供数据存储,具体划分如下:

在这里插入图片描述
这里我们以 0x4128BC90 为例进行讲解:

0x4128BC90(H) = 01000001001010001011110010010000(B)

Sign(符号位)

  • 0 表示正数
  • 1 表示负数

Exponent(指数位)

1000 0010(B) = 130 (D)

Significand(小数位)

01010001011110010010000(B) = 0*2^(-1) + 1*2^(-2) + ... + 0*2^(-23)

转换公式

F u n ( x ) = ( − 1 ) S i g n × ( 1 + S i g n i f i c a n d ) × ( 2 ) E x p o n e n t − 127 Fun(x) = (-1)^{Sign} \times (1 + Significand) \times (2)^{Exponent - 127} Fun(x)=(1)Sign×(1+Significand)×(2)Exponent127

转换方法

var bytes = new Array();

bytes[0] = 65;
bytes[1] = 40;
bytes[2] = 188;
bytes[3] = 144;

//IEEE754
function hex2float(num) {
  	//符号位
    var sign = (num & 0x80000000) ? -1 : 1;
  	//指数位
    var exponent = ((num >> 23) & 0xff) - 127;
  	//尾数位
    var mantissa = 1 + ((num & 0x7fffff) / 0x7fffff);
    return sign * mantissa * Math.pow(2, exponent);
}

//拼接为number对象
var mfloat = ((bytes[0] & 0xFF) << 24) | 
	((bytes[1] & 0xFF) << 16) | 
	((bytes[2] & 0xFF) << 8) | 
	(bytes[3] & 0xFF);

console.log(hex2float(mfloat));

在线工具

以下是个人推荐的两个在线工具,用于验证非常合适:

Float (IEEE754 Single precision 32-bit)

在线进制转换器_浮点数转换

参考鸣谢

Converting hexadecimal to float in javascript

计算机基础——IEEE754标准的浮点数的转化

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS - 4字节转单精度浮点数 的相关文章

随机推荐

  • Spring学习笔记:基于XML文件和注解两种配置方式实现spring框架的IOC和DI

    首先打开IntelliJ IDEA 创建一个Maven项目spring lesson 删除src文件夹 只保留maven依赖对应的pom文件 这个项目作为父工程 在pom文件中增加
  • filco蓝牙键盘配对流程_无线化浪潮,几款最值得推荐的无线机械键盘

    在外设中相比于游戏鼠标和耳机 键盘对于无线的需求性是最弱的 毕竟键盘放在那一般比较固定 不会像鼠标在使用时线材的拖拽影响移动 耳机的连接线会增加重量 这些增加的重量全都要头部去承担 游戏间隙的内急需要取下等干扰 这也导致在无线化的普及度上键
  • Dev-c++函数的分文件编写

    首先创建一个文件侠 到时候创建的文件地址路径能一样 方便查找 c语言和c 语言雷同 2 新建 项目 3 c项目和c 项目 你用那个语言写就选那个 4 把创建的 文件2 dev 文件 保存在刚刚创建的文件下面 5 然后选择New Fie创建文
  • Lua基础之math(数学函数库)

    Lua5 1中数学库的所有函数如下表 math pi 为圆周率常量 3 14159265358979323846 abs 取绝对值 math abs 15 15 acos 反余弦函数 math acos 0 5 1 04719755 asi
  • 企业工作效率提升系统

    企业工作效率提升系统 自动化办公系统 项目介绍 框架介绍 部署流程 项目截图 小编联系方式 备注 系统名称 自动化办公系统 办公自动化 OA 是面向组织的日常运作和管理 员工及管理者使用频率最高的应用系统 极大提高公司的办公效率 项目介绍
  • hive窗口函数最全总结

    准备工作 一 窗口函数概况 1 1 窗口函数说明 1 2 窗口范围说明 1 2 1 窗口范围取值可选项 1 2 2 默认窗口范围含义 思考一 如何理解省略order by的情况 不能指定窗口范围 二 窗口函数分类和特性 2 1 窗口函数分类
  • C++算法之深度优先搜索算法

    深度优先搜索算法是图算法的一种 即DFS Depth First Search 其过程是对每个可能的分支路径深入直到不能再深入为止 下面会介绍深度优先搜索算法 目录 1 框架 2 过程 2 1 步骤 2 2 解释 3 例题 1 框架 voi
  • ROS知识点——生成点云,发布、订阅ROS点云话题

    文章目录 1 点云基本概念 1 1 点云结构公共字段 1 2 点云类型 1 3 ROS的PCL接口 1 4 pcl ros点云格式转换 2 创建点云并发布ROS点云话题 2 1 创建功能包 2 2 发布ROS点云话题 2 3 订阅ROS点云
  • 【MySQL】12-常见数据类型

    常见类型 原则 一 整型 特点 zerofill 默认无符号 二 小数 1 浮点型 2 定点型 三 字符型 1 较短 2 enum枚举型 3 set型 四 日期型 datetime 和 datestamp 区别
  • No suitable driver found for jdbc:mysql://localhost:3306/test?characterEncoding=UTF8连接不上MySQL解决方法

    No suitable driver found for jdbc mysql localhost 3306 test useUnicode true characterEncoding UTF 8 解决方法 困惑了两天的问题终于解决了 第
  • 还不懂mock测试?一篇文章带你熟悉mock

    每天进步一点点 关注我们哦 每天分享测试技术文章 本文章出自 码同学软件测试 码同学公众号 自动化软件测试 码同学抖音号 小码哥聊软件测试 Hello 大家好 今天小编给大家分享一个实现mock服务的工具moco 那么问题来了 什么是moc
  • 浅谈软件危机

    什么是软件危机 软件危机是计算机软件在它的开发和维护过程中所遇到的一系列严重问题 概括地说 主要包含两方面的问题 如何开发软件 怎样满足对软件日益增长的需求 如何维护数量不断膨胀的已有软件 危机实例 IBM OS 360 操作系统被认为是一
  • C++与Java比较(转)

    作为一名C 程序员 我们早已掌握了面向对象程序设计的基本概念 而且Java的语法无疑是非常熟悉的 事实上 Java本来就是从C 衍生出来的 然而 C 和Java之间仍存在一些显著的差异 可以这样说 这些差异代表着技术的极大进步 一旦我们弄清
  • VS2019 windows驱动开发环境配置

    配置Windows驱动开发环境 VS2019 下载VS2019 下载链接 https visualstudio microsoft com zh hans downloads 选择你所需要的开发环境和配置 确认下载完后 在你安装的WDK 的
  • 【数据库系统概论】第三章:SQL

    B站视频 B站第一章 参考资料 图片来自视频链接和参考资料 本章目录 SQL特点 SQL基本概念 SQL的基本语法 SQL特点 SQL包括 数据查询 数据操作 数据定义 数据控制 它是一个非过程语言 什么是非过程性语言 我们在逻辑和物理模型
  • WPF依赖属性优先级

    有下面代码 属性 样式 触发器都设置了按钮的颜色 请问按钮最终是什么颜色
  • DIY个人智能家庭网关—— 路由器篇之安装python

    Python是一种解释型 面向对象 动态数据类型的高级程序设计语言 在openwrt上进行二次开发编写自己的程序 python肯定是最方便最快捷的编程语言 因为它是解释型语言 无需openwrt的编译环境 只要安装好了python就可以直接
  • vite跨域问题,你可能需要看这篇文章

    最近在学习项目的时候 使用了vite工具进行构建 然后出现了跨域的问题 中间的曲折不过多叙述 直接进入正题 前端成功启动后的界面 然后在后端进行的Controller上使用了如下的配置 然后浏览器就会出现跨域的问题 为什么会出现这个情况了
  • 学生成绩管理系统、Java

    这是一个功能比较简单的学生管理系统 特别适合初学者练练手 没有使用Java的特点 更完美的学生管理系统在我的博客寻找 import java util Scanner public class StudentManagement publi
  • JS - 4字节转单精度浮点数

    文章目录 JS 数据类型 IEEEE475 Sign 符号位 Exponent 指数位 Significand 小数位 转换公式 转换方法 在线工具 参考鸣谢 JS 数据类型 JS 是一种弱类型的语言 它的数据类型包含字符串值 数值 布尔值