如何将float转换为字节数组?

时间:2014-11-20 10:30:02

标签: javascript typeconverter

我需要将一个浮点值(比如3.5)转换为JavaScript中的一个字节数组。

对此问题的研究似乎只是朝着另一个方向发展。

我写的应用程序允许用户输入一个浮点值,通过蓝牙发送到微控制器。

特定数据协议期望值以小端顺序依次为字节。 有人能帮助我吗?

(对不起,如果我的英语有点偏离。它不是我的第一语言。)

2 个答案:

答案 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>