二进制数据到数字与字节序转换在JavaScript



我收到二进制数据作为字符串,我如何将其转换为JS编号与小端字节CPU?ArrayBuffer, DataView有用吗?

不只是基数转换问题

但是我必须转换内存地址并得到数字值。

var binary = "10000000"; // 16
parseInt("10000000", 2) // 128
// Buffer 10 00 00 00
// Little Endian 00 00 00 10
// 0x00000010 => 16

这是用lodash手动回答的。但是我想知道JavaScript如何使用ArrayBuffer和DataView。

var _ = require('lodash');
var endianness = null;
(function () {
    var b = new ArrayBuffer(4);
    var a = new Uint32Array(b);
    var c = new Uint8Array(b);
    a[0] = 0xdeadbeef;
    if (c[0] === 0xef) {
        return endianness = 'LE';
    } else if (c[0] === 0xde) {
        return endianness = 'BE';
    }
    throw new Error('Unknown endianness');
})();
function toInt(binStr) {
    if (binStr % 2 !== 0) {
        throw new Error('Invalid binary string');
    }
    var arr = _.chunk(binStr, 2);
    if (endianness === 'LE') {
        arr = arr.reverse();
    }
    var converted = _.flatten(arr).join('');
    return parseInt(converted, 16);
}

感谢您的支持!

不确定这是否是最好的方法,但它可以工作(对于32位值):

var toInt = function(binStr) {
  var int  = parseInt(binStr, 16);
  var view = new DataView(new ArrayBuffer(4));
  view.setUint32(0, int, endianness === 'LE');
  return view.getUint32(0, false);
};
console.log( toInt('10000000') );

相关内容

  • 没有找到相关文章

最新更新