我需要将一个浮点值(比如3.5)转换为JavaScript中的一个字节数组。
对此问题的研究似乎只是朝着另一个方向发展。
我写的应用程序允许用户输入一个浮点值,通过蓝牙发送到微控制器。
特定数据协议期望值以小端顺序依次为字节。 有人能帮助我吗?
(对不起,如果我的英语有点偏离。它不是我的第一语言。)
答案 0 :(得分:0)
最简单的方法是使用ArrayBuffer
:
buf = new ArrayBuffer(64);
flt = new Float64Array(buf);
flt[0] = 12.34;
现在buf
包含浮点数的压缩二进制表示。如果您的API支持缓冲区,则可以按原样发送,或者将其转换为字节数组:
bytes = new Uint8Array(buf);
for(var i = 0; i < 65; i++) {
console.log(bytes[i])
}
答案 1 :(得分:0)
可能注意到最短路,但有效:
$( 'div:eq(0)' ).html(function(){ return '0x40600000<br>'+hex2bytes(0x40600000)});
$( 'div:eq(1)' ).html(function(){ return '0xFF<br>'+hex2bytes(0xFF)});
$( 'div:eq(2)' ).html(function(){ return '0x1<br>'+hex2bytes(0x1)});
$( 'div:eq(3)' ).html(function(){ return '0xF00F0770<br>'+hex2bytes(0xF00F0770)});
function hex2bytes ( hex ) {
var binary = "", tmp;
hex = hex.toString(16);
// Pad
while (hex.length % 8) hex = "0" + hex;
// Consume 8 or 16 characters long hex string
while( hex.length ) {
// Work on next 2 hex
tmp = hex.slice(0,2);
hex = hex.slice(2,Infinity);
// convert double hex to 8 binary digits
tmp = new Number('0x' + tmp ).toString(2);
// Pad
while (tmp.length % 8) tmp = "0" + tmp;
// Add space and append to previous
binary = binary + ' '+ tmp ;
}
// Remove last [ ]
binary = binary.slice(1,Infinity);
return binary;
}
div {
margin-bottom: 1em;
font-family: "Courier New", monospace;
white-space: pre;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
<div></div>
<div></div>
<div></div>