Node.js's Buffer.writeFloatBE in Javascript
Node.js's Buffer.writeFloatBE in Javascript
以下代码进行浮点到整数的转换,如下所示:
var buffer = new Buffer(4);
buffer.writeFloatBE(number, 0);
return -~parseInt(buffer.toString('hex'), 16) - 1;
它的输出是这样的
(float)0.05 = (int)1028443341
(float)-0.05 = (int)-1119040307
(float)0.1 = (int)1036831949
(float)-0.1 = (int)-1110651699
(float)0.2 = (int)1045220557
(float)-0.2 = (int)-1102263091
(float)0.5 = (int)1056964608
(float)-0.5 = (int)-1090519040
如何反转此代码,插入整数(1056964608)并返回浮点值?
我们可以逐个还原每个操作,最终得到以下代码:
var hexString = (~-(number + 1)).toString(16);
return new Buffer(hexString, 'hex').readFloatBE();
这在正浮点上可以很好地工作,所以我们应该对负浮点格外小心。
来自@PleaseStand:的回答
Tilde运算符删除小数点后的所有内容,因为逐位运算符将其操作数隐式转换为有符号的32位整数。
如果x在-(231)和2-1之间为否,则将发生溢出;"环绕";。
> floatToBin(0.05)
'11 1101 0100 1100 1100 1100 1100 1101'
> floatToBin(-0.05)
'1011 1101 0100 1100 1100 1100 1100 1101'
所以,最后的功能看起来是这样的:
function intToFloat(number) {
number = ~-(number + 1);
if (number < 0) {
number += Math.pow(2, 32);
}
var float = new Buffer(number.toString(16), 'hex').readFloatBE();
const significantDigits = 5;
return parseFloat(float.toFixed(significantDigits));
}
相关文章:
- Node.js's Buffer.writeFloatBE in Javascript
- AudioBufferSourceNode.buffer deprecated?
- 抛出消息;TypeError:第一个参数必须是字符串或Buffer
- WebGL错误-错误:WebGL:bindBuffer:buffer已包含元素数据
- NodeJS buffer.slice()不是函数
- php/jquery buffer full ?页面未完全加载
- 带有两个参数的“data”回调不会将buffer.toString()打印为字符串
- Buffer.byteLength 返回截然不同的字节长度
- C# 等效于从现有数组的 .buffer 创建的 JavaScript TypedArray
- readFile每次返回不同的Buffer值
- 对Buffer如何在node.js中编码base64感到困惑
- buffer.js:246”;对象1没有方法'至小写'
- 从客户端使用NodeJs Buffer类
- Nodejs:在一个新窗口中写入zip文件(存储在一个变量中作为Buffer)
- 如何在Processing.js上绘制图像时使用Z-Buffer
- Uint32Array(buffer, byteOffset, length)没有按预期工作
- 用Buffer对象解码base64输入
- node . js # 39;缓冲.writeFloatBE在Javascript的ArrayBuffer
- 如何理解这些函数中的端序:'writeFloatLE', 'writeFloatBE',
- 为什么使用' Buffer.concat(body). tostring(); '而不是' Uint8Array/Buf